Caching-Probleme mit SQLAlchemy lösen
Beim Verwenden von SQLAlchemy zum Einfügen und Abrufen von Daten aus einer Datenbank können Caching-Probleme auftreten, die zu Inkonsistenzen führen. Dieser Artikel untersucht die häufigsten Ursachen und bietet eine Lösung zum Deaktivieren des Cachings in SQLAlchemy.
Grundlegendes zum SQLAlchemy-Caching
SQLAlchemy verwaltet eine Identitätszuordnung innerhalb jeder Transaktion, die als fungiert Cache für Objekte, auf die zuletzt zugegriffen wurde. Dies optimiert die Leistung, indem mehrere Datenbankabfragen für dieselben Daten verhindert werden. Wenn Daten jedoch extern in SQLAlchemy aktualisiert werden, kann dieser Cache Probleme verursachen, indem er veraltete Ergebnisse zurückgibt.
Caching deaktivieren
Um dieses Problem zu beheben, ist eine Deaktivierung erforderlich Caching in SQLAlchemy. Dies kann erreicht werden, indem das Flag „expire_on_commit“ in der Mapper-Konfiguration auf „True“ gesetzt wird. Der folgende Code demonstriert, wie das geht:
# 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 }
Indem Sie „expire_on_commit“ auf „True“ setzen, lässt SQLAlchemy alle Objekte in der Identitätszuordnung beim Commit ablaufen. Dadurch wird sichergestellt, dass immer die neuesten Daten aus der Datenbank abgerufen werden.
Beispiel
Betrachten Sie das in der ursprünglichen Frage beschriebene Szenario:
# 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>
Wenn das Caching deaktiviert ist, gibt SQLAlchemy den aktualisierten Benutzerdatensatz (Jane Doe) anstelle des veralteten zwischengespeicherten Datensatzes (John Doe) zurück. Dadurch wird das Caching-Problem gelöst und sichergestellt, dass die Anwendung immer die neuesten Daten aus der Datenbank abruft.
Das obige ist der detaillierte Inhalt vonWie kann ich das SQLAlchemy-Caching deaktivieren, um Dateninkonsistenzen zu verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!