有没有办法强制将sqlalchemy映射的对象视为dirty
?例如,鉴于sqlalchemy Object Relational Tutorial的上下文,证明了问题,
a=session.query(User).first()
a.__dict__['name']='eh'
session.dirty
屈服,
IdentitySet([])
我正在寻找一种强制用户a
进入脏状态的方法。
出现这个问题是因为使用sqlalchemy映射的类控制了属性getter / setter方法,这阻止了sqlalchemy注册更改。
答案 0 :(得分:18)
我最近遇到了同样的问题而且并不明显。
对象本身并不脏,但它们的属性是。正如我所知,SQLAlchemy只会回写已更改的属性,而不是整个对象。
如果使用set_attribute
设置属性并且它与原始属性数据不同,则SQLAlchemy会发现该对象是脏的(TODO:我需要详细说明它是如何进行比较的):
from sqlalchemy.orm.attributes import set_attribute
set_attribute(obj, data_field_name, data)
如果您想要将对象标记为脏,而不管原始属性值是什么,无论它是否已更改,请使用flag_modified
:
from sqlalchemy.orm.attributes import flag_modified
flag_modified(obj, data_field_name)
答案 1 :(得分:5)