克服SQLAlchemy 中的ORM 資料快取
利用SQLAlchemy 進行資料管理時,使用者可能會遇到一個明顯的快取問題,其中檢索的資料保持不變,儘管直接對資料庫進行更新。這可能是一個令人費解的兩難。
揭曉緩存:了解事務隔離
所經歷的行為不是由於 SQLAlchemy 中的明確緩存,而是一個基本特徵事務隔離。預設情況下,SQLAlchemy 以事務模式運作。資料修改僅在呼叫 session.commit() 時寫入資料庫。
但是,事務隔離引入了一個扭曲。雖然其他活動事務無法立即存取修改後的數據,但即使在提交或回滾自己的事務之後,它們也可能無法看到它。這種現象稱為可重複讀取,可確保交易維持其已載入的狀態,即使實際資料已變更。
禁用感知緩存
而不是真正的緩存,可以透過使用連接池來減輕事務隔離的影響。透過確保所有連接都源自公共池,您可以避免跨不同連接的資料快取並提高更新的可見性。若要啟用連線池,請將 pool_recycle 參數設為非零值。
例如:
engine = create_engine('mysql://user:password@host/db', pool_recycle=3600)
在此實例中,連線將每 3600 秒回收一次,防止資料快取問題與交易隔離相關。
以上是為什麼我在資料庫中更改 SQLAlchemy 資料後沒有更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!