Błąd sesji SQLAlchemy
Tło: Flask / Flask-SQLAlchemy / Flask-WTF, używając sesji deklaratywnej i ograniczonej
ProstyPOST
operacja:
@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()
Teraz próbuję go uruchomić, pojawia się błąd:
InvalidRequestError: Object '' jest już dołączony do sesji „1” (jest to „2”)
Zmiana dodawania do scalenia rozwiązuje problem, ale:
Nie wiem, dlaczego muszę scalać obiekt, gdy go zainicjowałemJeśli zmienię, dodaj do scalenia i spróbuj zdefiniować jedną z właściwości w linii
order = Order()
order_form.populate_obj(order)
order.order_status = OrderStatus.query.filter(OrderStatus.code=='PLACED').first()
db_session.merge(order)
db_session.commit()
Otrzymuję ten sam błąd, właśnie teraz w obiekcie OrderStatus
InvalidRequestError: Object '' jest już dołączony do sesji „2” (jest to „1”)
Czy ktoś może mi wskazać, gdzie robię coś złego, ponieważ doprowadza mnie to do szału. Mam pewne doświadczenie z SQLAlchemy, ale po raz pierwszy widzę takie zachowanie i nie mogę zidentyfikować problemu.
Przeszukiwanie wszystkiego, co znalazłem, było problemem z inicjalizacją sesji podwójnej bazy danych, ale nie wierzę, że to przypadek.
EDYTOWAĆ
db_session jest zdefiniowany w oddzielnym pliku database.py z następującą treścią
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()