Coba tambahkan
app.teardown_request(Exception=None)
Dekorator, yang mengeksekusi di akhir setiap permintaan. Saat ini saya mengalami masalah serupa, dan sepertinya hari ini saya benar-benar telah menyelesaikannya menggunakan.
@app.teardown_request
def teardown_request(exception=None):
Session.remove()
if exception and Session.is_active:
print(exception)
Session.rollback()
Saya tidak menggunakan Flask-SQLAlchemy
Hanya SQLAlchemy
Mentah , jadi mungkin ada perbedaan untuk Anda.
Dari Dokumen
Dalam kasus saya, saya membuka scoped_session
baru untuk setiap permintaan, mengharuskan saya untuk menghapusnya di akhir setiap permintaan (Flask-SQLAlchemy
mungkin tidak membutuhkan ini). Selain itu, fungsi teardown_request diberikan Exception
jika salah satu terjadi selama konteks. Dalam skenario ini, jika terjadi pengecualian (mungkin menyebabkan transaksi tidak dihapus, atau memerlukan rollback), kami memeriksa apakah ada pengecualian, dan melakukan rollback.
Jika ini tidak berhasil untuk pengujian saya sendiri, hal berikutnya yang akan saya lakukan adalah session.commit()
di setiap pembongkaran, hanya untuk memastikan semuanya terbilas
UPDATE :juga muncul MySQL membatalkan koneksi setelah 8 jam, menyebabkan Sesi rusak.
atur pool_recycle=3600
pada konfigurasi mesin Anda, atau ke pengaturan