एक जोड़ने का प्रयास करें
app.teardown_request(Exception=None)
डेकोरेटर, जो प्रत्येक अनुरोध के अंत में निष्पादित होता है। मैं वर्तमान में इसी तरह की समस्या का सामना कर रहा हूं, और ऐसा लगता है कि आज मैंने इसका उपयोग करके वास्तव में इसका समाधान कर लिया है।
@app.teardown_request
def teardown_request(exception=None):
Session.remove()
if exception and Session.is_active:
print(exception)
Session.rollback()
मैं Flask-SQLAlchemy
का उपयोग नहीं करता केवल कच्चा SQLAlchemy
, इसलिए इसमें आपके लिए मतभेद हो सकते हैं।
डॉक्स से
मेरे मामले में, मैं एक नया scoped_session
open खोलता हूं प्रत्येक अनुरोध के लिए, मुझे प्रत्येक अनुरोध के अंत में इसे हटाने की आवश्यकता होती है (Flask-SQLAlchemy
इसकी आवश्यकता नहीं हो सकती है)। साथ ही, teardown_request फ़ंक्शन को Exception
पास किया जाता है यदि कोई संदर्भ के दौरान हुआ है। इस परिदृश्य में, यदि कोई अपवाद होता है (संभावित रूप से लेन-देन को हटाया नहीं जा सकता है, या रोलबैक की आवश्यकता है), तो हम जांचते हैं कि क्या कोई अपवाद था, और रोलबैक।
अगर यह मेरे अपने परीक्षण के लिए काम नहीं करता है, तो अगली चीज़ जो मैं करने जा रहा था वह था session.commit()
प्रत्येक टियरडाउन पर, बस यह सुनिश्चित करने के लिए कि सब कुछ फ्लश हो रहा है
अद्यतन:ऐसा भी प्रतीत होता है कि MySQL 8 घंटे के बाद कनेक्शन को अमान्य कर देता है, जिससे सत्र दूषित हो जाता है।
सेट pool_recycle=3600
आपके इंजन कॉन्फ़िगरेशन पर, या सेटिंग