当尝试更改使用SQLAlchemy加载的对象时,session.dirty
对象的行为不符合我的期望:
o = sqla.session.query(sqla.Game).first()
<sqla.Game at 0x7fdcc1f707b8>
o.wiki
<null>
o.wiki = 'test'
o.wiki
'test'
sqla.session.is_modified(o)
False
sqla.session.dirty
IdentitySet([])
inspect(o).attrs['wiki'].history
History(added=(), unchanged=['test'], deleted=())
将其提交到数据库实际上确实会对其进行更新,但是我真的不清楚为什么将其标记为“未更改”。如果我修改对象上的关系,该关系会正确显示在历史记录的“新”和“已删除”区域中。我正在通过自动映射加载模型,并且该会话没有自动提交。
我还尝试过手动调用flag_modified
,并直接(没有自动映射)指定该列无效。
答案 0 :(得分:0)
我知道了。我默认启用了autoflush
。将其设置为False可以解决此问题。