Hintergrund: Flask/Flask-SQLAlchemy/Flask-WTF, unter Verwendung von deklarativen und scoped SitzungSQLAlchemy Sitzungen Fehler
Einfache POST
Betrieb:
@tas.route('/order_add', methods=['GET', 'POST'])
def tas_order_add():
if request.method == 'POST':
order_form = OrderForm()
if order_form.validate_on_submit():
order = Order()
order_form.populate_obj(order)
db_session.add(order)
db_session.commit()
Jetzt versucht, es zu laufen bekomme ich einen Fehler:
InvalidRequestError: Object '' is already attached to session '1' (this is '2')
Ändern hinzufügen löst das Problem zu fusionieren, aber:
- Ich weiß nicht, warum ich ein Objekt verschmelzen, während ich es nur initiiert
Wenn ich hinzufügen, ändern sich zu fusionieren und versuchen Sie eine der Eigenschaften etwas in Zeile
definierenorder = Order() order_form.populate_obj(order) order.order_status = OrderStatus.query.filter(OrderStatus.code=='PLACED').first() db_session.merge(order) db_session.commit()
ich bekomme den gleichen Fehler, gerade jetzt auf Orderstatus Objekt
InvalidRequestError: Object '' is already attached to session '2' (this is '1')
Kann mir jemand zeigen, wo ich etwas falsch tue, weil es mich verrückt fährt. Ich habe etwas Erfahrung mit SQLAlchemy, aber es ist das erste Mal, dass ich ein solches Verhalten sehe und ich kann das Problem nicht lokalisieren.
Suche alles, was ich fand, war ein Problem mit der doppelten Datenbanksitzung Initialisierung, aber ich glaube nicht, es ist dieser Fall.
EDIT
db_session wird in separaten Datei database.py definiert mit Inhalt folgenden
from sqlalchemy.engine import create_engine
from sqlalchemy.ext.declarative.api import declarative_base
from sqlalchemy.orm.scoping import scoped_session
from sqlalchemy.orm.session import sessionmaker
engine = create_engine('sqlite:///fundmanager_devel.db', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
wo ist db_session definiert? Kannst du den Code dafür hinzufügen? –
Als Bearbeitung zur Frage hinzugefügt –