資料
sqlalchemy 事務 - 簡書
- 在 SQLAlchemy 中,事務是通過會話來管理的。當你開始一個事務(例如使用?
async with db.begin()
),它會開啟一個新的事務,并在事務塊結束時自動提交或回滾。- 如果在同一個會話中,事務還未結束,就再次嘗試開始另一個事務,就會拋出?
A transaction is already begun on this Session
?這個錯誤。
解決
報錯的中文解釋是:此會話上已經有一個開始了的事務.
嘛意思呢? 你在同一個數據庫會話(Session)中嘗試開始一個新的事務,而實際上這個會話已經有一個正在進行中的事務了。
也就是說:你執行的另外一個數據庫操作沒有完成.
最后通過 :session.in_transaction()方法來找哪里沒有關閉
然后找到了
result = await db.execute(select(XXXX).filter(...))_result = result.scalars().all()
此處開啟了一個事務 -_-! (查詢也開事務啊?,其實是 .excute()會開啟事務)
在需要的地方執行 .commit() 或 .rollback() 即可