是否有办法强制由sqlalchemy映射的对象被视为dirty?例如,考虑到sqlalchemy的对象关系教程的上下文,我们演示了这个问题,
a=session.query(User).first()
a.__dict__['name']='eh'
session.dirty屈服,
IdentitySet([])我正在寻找一种强迫用户a进入脏状态的方法。
之所以会出现这个问题,是因为使用sqlalchemy映射的类控制了属性getter/setter方法,从而阻止sqlalchemy注册更改。
发布于 2015-04-23 18:42:06
我最近遇到了同样的问题,但并不明显。
对象本身并不脏,但它们的属性是脏的。据我所知,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)发布于 2017-12-26 17:34:05
如果一个人知道属性有一个值,那么flag_modified方法就能工作。SQLAlchemy文档州
将实例上的属性标记为“修改”。 这将在实例上设置“修改”标志,并为给定属性建立无条件的更改事件。该属性必须具有当前值,否则将引发InvalidRequestError。
从版本1.2开始,如果要标记整个实例,那么flag_dirty就是解决方案
在没有提到任何特定属性的情况下,将实例标记为“脏”。
https://stackoverflow.com/questions/29830229
复制相似问题