Menyelesaikan Isu Caching dengan SQLAlchemy
Apabila menggunakan SQLAlchemy untuk memasukkan dan mendapatkan semula data daripada pangkalan data, isu caching boleh timbul, yang membawa kepada ketidakkonsistenan. Artikel ini menyiasat punca biasa dan menyediakan penyelesaian untuk melumpuhkan caching dalam SQLAlchemy.
Memahami SQLAlchemy Caching
SQLAlchemy mengekalkan peta identiti dalam setiap transaksi, yang bertindak sebagai cache untuk objek yang diakses baru-baru ini. Ini mengoptimumkan prestasi dengan menghalang berbilang pertanyaan pangkalan data untuk data yang sama. Walau bagaimanapun, apabila data dikemas kini secara luaran kepada SQLAlchemy, cache ini boleh menyebabkan masalah dengan mengembalikan hasil yang lapuk.
Melumpuhkan Caching
Untuk menyelesaikan isu ini, adalah perlu untuk melumpuhkan caching dalam SQLAlchemy. Ini boleh dicapai dengan menetapkan bendera expire_on_commit kepada True pada konfigurasi pemeta. Kod berikut menunjukkan cara untuk melakukan ini:
# 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 }
Dengan menetapkan expire_on_commit kepada True, SQLAlchemy akan tamat tempoh semua objek dalam peta identiti apabila komit. Ini memastikan bahawa data terkini sentiasa diambil daripada pangkalan data.
Contoh
Pertimbangkan senario yang diterangkan dalam soalan asal:
# 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>
Dengan caching dilumpuhkan, SQLAlchemy akan mengembalikan rekod pengguna yang dikemas kini (Jane Doe) dan bukannya rekod cache yang sudah lapuk. (John Doe). Ini menyelesaikan masalah caching dan memastikan aplikasi sentiasa mendapatkan semula data terkini daripada pangkalan data.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Lumpuhkan Caching SQLAlchemy untuk Mencegah Ketidakkonsistenan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!