Rumah >pangkalan data >tutorial mysql >Mengapakah Data SQLAlchemy Saya Tidak Kemas Kini Selepas Saya Mengubahnya dalam Pangkalan Data?
Mengatasi ORM Data Caching dalam SQLAlchemy
Apabila memanfaatkan SQLAlchemy untuk pengurusan data, pengguna mungkin menghadapi isu caching yang dilihat di mana data yang diambil kekal tidak berubah walaupun kemas kini yang dibuat terus ke pangkalan data. Ini boleh menjadi kesusahan yang membingungkan.
Cache Didedahkan: Memahami Pengasingan Transaksi
Tingkah laku yang dialami bukan disebabkan oleh cache eksplisit dalam SQLAlchemy, melainkan ciri asas pengasingan transaksi. Secara lalai, SQLAlchemy beroperasi dalam mod transaksi. Pengubahsuaian data hanya ditulis pada pangkalan data apabila memanggil session.commit().
Walau bagaimanapun, pengasingan transaksi memperkenalkan kelainan. Walaupun transaksi aktif lain tidak dapat mengakses data yang diubah suai dengan serta-merta, mereka juga mungkin tidak dapat melihatnya walaupun selepas melakukan atau melancarkan semula transaksi mereka sendiri. Fenomena ini, yang dikenali sebagai bacaan berulang, memastikan urus niaga mengekalkan keadaan yang telah dimuatkan, walaupun apabila data sebenar telah berubah.
Melumpuhkan Caching yang Diperhatikan
Semasa bukan cache sebenar, kesan pengasingan transaksi boleh dikurangkan dengan menggunakan pengumpulan sambungan. Dengan memastikan bahawa semua sambungan berasal daripada kumpulan biasa, anda boleh mengelakkan caching data merentas sambungan yang berbeza dan meningkatkan keterlihatan kemas kini. Untuk mendayakan pengumpulan sambungan, tetapkan parameter pool_recycle kepada nilai bukan sifar.
Contohnya:
engine = create_engine('mysql://user:password@host/db', pool_recycle=3600)
Dalam keadaan ini, sambungan akan dikitar semula setiap 3600 saat, menghalang isu cache data berkaitan dengan pengasingan transaksi.
Atas ialah kandungan terperinci Mengapakah Data SQLAlchemy Saya Tidak Kemas Kini Selepas Saya Mengubahnya dalam Pangkalan Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!