मैं Falsk-SQLAlachemy का उपयोग करके डीबी में डालने से पहले किसी ऑब्जेक्ट की विशेषता को बदलना चाहता हूं। मैं before_models_committed संकेत उपयोग करने की कोशिश, लेकिन यह टूट किया जा रहा है, तो मैं बजाय models_commited कर रहा हूँ: प्रयास करने (और परिवर्तन फिर से करने से) और मैं निम्नलिखित त्रुटि मिलती है:सत्र प्रतिबद्धता पर ऑब्जेक्ट की विशेषता बदलें - फ्लास्क SQLAlchemy
InvalidRequestError: This session is in 'committed' state; no further SQL can be emitted within this transaction.
कोड bellow प्रदान की जाती है:
from app import db
from app import app
from flask.ext.sqlalchemy import models_committed
class Foo(db.Model):
id = db.Column(db.Integer, primary_key=True)
foo_attr = db.Column(db.String(128), index=True)
def on_models_committed(app, changes):
for change in changes:
foo_obj = change[0]
operation = change[1]
if foo_obj.__class__.__name__ == 'Foo':
if operation == 'insert':
foo_obj.foo_attr = get_new_value()
db.session.add(foo_obj)
db.session.commit()
models_committed.connect(on_models_committed)
क्या किसी भी कार्य को निष्पादित करने के लिए किसी भी सिग्नल को जोड़ने का कोई तरीका है जब भी कोई नई वस्तु डीबी में डाली जाती है और उन परिवर्तनों को सहेजती है?
धन्यवाद!
विश्वास है कि यहां एक महत्वपूर्ण अंतर है। 'models_committed' की तुलना में 'pre_insert' सत्र में एक अलग पल पर होता है। [स्रोत] (https://pythonhosted.org/Flask-SQLAlchemy/signals.html#models_committed) –