首頁 >資料庫 >mysql教程 >如何停用 SQLAlchemy 快取以防止資料不一致?

如何停用 SQLAlchemy 快取以防止資料不一致?

Barbara Streisand
Barbara Streisand原創
2024-11-29 02:29:10761瀏覽

How Can I Disable SQLAlchemy Caching to Prevent Data Inconsistencies?

使用 SQLAlchemy 解決快取問題

使用 SQLAlchemy 從資料庫插入和檢索資料時,可能會出現快取問題,從而導致不一致。本文研究了常見原因並提供了在 SQLAlchemy 中停用快取的解決方案。

了解 SQLAlchemy 快取

SQLAlchemy 在每個事務中維護一個識別映射,該映射充當快取最近存取的物件。這樣可以防止對相同資料進​​行多個資料庫查詢,從而優化效能。但是,當資料從外部更新到 SQLAlchemy 時,此快取可能會因傳回過時的結果而導致問題。

停用快取

要解決此問題,有必要停用SQLAlchemy 中的快取。這可以透過在映射器配置上將 expire_on_commit 標誌設為 True 來實現。以下程式碼示範如何執行此操作:

# Import the ORM classes
from sqlalchemy import Column, Integer, String, create_engine, sessionmaker

# Create an engine and session factory
engine = create_engine('mysql+pymysql://username:password@host/database')
Session = sessionmaker(bind=engine)

# Define the User class
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)

    __mapper_args__ = {
        'expire_on_commit': True
    }

透過將expire_on_commit 設定為True,SQLAlchemy 將在提交時使身分映射中的所有物件過期。這可確保始終從資料庫中檢索最新資料。

範例

考慮原始問題中所描述的場景:

# Create a session
session = Session()

# Insert data into the database
new_user = User(name='John Doe')
session.add(new_user)
session.commit()

# Update the data directly in the database
connection = engine.connect()
cursor = connection.cursor()
cursor.execute("UPDATE users SET name='Jane Doe' WHERE>

停用快取後,SQLAlchemy 將傳回更新的使用者記錄(Jane Doee ),而不是過時的快取記錄(John美國能源部)。這解決了快取問題並確保應用程式始終從資料庫中檢索最新資料。

以上是如何停用 SQLAlchemy 快取以防止資料不一致?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn