SQLAlchemy不会将会话标记为已更改属性为脏

时间:2019-01-07 15:28:47

标签: sqlalchemy

当尝试更改使用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,并直接(没有自动映射)指定该列无效。

1 个答案:

答案 0 :(得分:0)

我知道了。我默认启用了autoflush。将其设置为False可以解决此问题。