sqlalchemy:在会话-';SessionMaker';对象没有属性'_型号更改';

sqlalchemy:在会话-';SessionMaker';对象没有属性'_型号更改';,sqlalchemy,flask,flask-sqlalchemy,Sqlalchemy,Flask,Flask Sqlalchemy,我是炼金术新手。我们主要使用Flask,但在一个特殊情况下,我需要手动连接数据库。因此,我启动了一个新的db连接,如下所示: write_engine = create_engine("mysql://user:pass@localhost/db?charset=utf8") write_session = scoped_session(sessionmaker(autocommit=False, autoflush=False,bind=write_engine)) nlabel =

我是炼金术新手。我们主要使用Flask,但在一个特殊情况下,我需要手动连接数据库。因此,我启动了一个新的db连接,如下所示:

write_engine = create_engine("mysql://user:pass@localhost/db?charset=utf8")
write_session = scoped_session(sessionmaker(autocommit=False,
    autoflush=False,bind=write_engine))

nlabel = write_session.query(Label).filter(Label.id==label.id).first() # Works
#Later in code
ms = Message("Some message")
write_session.add(ms) # Works fine
write_session.commit() # Errors out
错误看起来像“AttributeError:“SessionMaker”对象没有属性“\u model\u changes”

我做错了什么?

我认为您可能错过了会话对象的初始化

尝试:


这是在黑暗中拍摄的-我对炼金术不是很熟悉。祝你好运

您的问题是缺少这一行:

db_session._model_changes = {}

消息模型是什么样子的?如果您正在使用Flask Sqlalchemy扩展,这可能会派上用场:
write_session
实际上应该是
session
的一个实例,而不是
SessionMaker
,请添加一些关于您的解决方案以及它如何解决问题的解释problem@Philip,因为flask为会话附加了一个静态方法。因此,在提交之前,它会检查模型的更改。请参阅flask_sqlclchemy的init.py。以下是函数:def session\u signal\u before\u commit(session):d=session。如果d:before\u models\u committed.send(session.app,changes=d.values()),则会更改\u model\u
db_session._model_changes = {}