Ich versuche, einen Ereignis-Listener zum before_commit
Ereignis einer SQLAlchemy Sitzung innerhalb einer Flask-Anwendung hinzuzufügen. Wenn Sie die folgenden SchritteEreignis-Listener in Bereichssitzung
def before_commit(session):
for item in session:
if hasattr(item, 'on_save'):
item.on_save(session)
event.listen(db.session, 'before_commit', before_commit)
ich
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "app.py", line 60, in <module>
event.listen(db.session, 'before_commit', before_commit)
File "C:\Python27\lib\site-packages\sqlalchemy\event\api.py", line 49, in listen
_event_key(target, identifier, fn).listen(*args, **kw)
File "C:\Python27\lib\site-packages\sqlalchemy\event\api.py", line 22, in _event_key
tgt = evt_cls._accept_with(target)
File "C:\Python27\lib\site-packages\sqlalchemy\orm\events.py", line 1142, in _accept_with
"Session event listen on a scoped_session "
sqlalchemy.exc.ArgumentError: Session event listen on a scoped_session requires that its creation callable is associated with the Session class.
Ich kann nicht den richtigen Weg finden, den Ereignis-Listener zu registrieren. Die Dokumentation besagt, dass event.listen()
auch eine scoped_session
akzeptiert, aber es scheint, als ob es nicht ?!
http://docs.sqlalchemy.org/en/latest/orm/events.html#sqlalchemy.orm.events.SessionEvents
Die Funktion listen() wird Session-Objekte übernehmen sowie das Rückergebnis von sessionmaker() und scoped_session().
Zusätzlich wird die Session-Klasse akzeptiert, die Listener global auf alle Instanzen der Session anwendet.
Können Sie mehr Code darüber schreiben, wie Sie db.session einrichten, damit wir sicherstellen können, dass Sie das richtig machen? Meine Vermutung ist, dass db.session nicht richtig eingerichtet ist. – iandouglas
Siehe https://github.com/mitsuhiko/flask-sqlalchemy/issues/182 – opyate
@opyate hat Recht. Sie haben ein bekanntes Problem festgestellt, das auf diesem Link beschrieben wird. Allerdings sieht es noch immer nicht so aus. –