首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制对象在sqlalchemy中为‘force’

强制对象在sqlalchemy中为‘force’
EN

Stack Overflow用户
提问于 2015-04-23 17:14:40
回答 2查看 9.6K关注 0票数 16

是否有办法强制由sqlalchemy映射的对象被视为dirty?例如,考虑到sqlalchemy的对象关系教程的上下文,我们演示了这个问题,

代码语言:javascript
复制
a=session.query(User).first()
a.__dict__['name']='eh'
session.dirty

屈服,

代码语言:javascript
复制
IdentitySet([])

我正在寻找一种强迫用户a进入脏状态的方法。

之所以会出现这个问题,是因为使用sqlalchemy映射的类控制了属性getter/setter方法,从而阻止sqlalchemy注册更改。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-23 18:42:06

我最近遇到了同样的问题,但并不明显。

对象本身并不脏,但它们的属性是脏的。据我所知,SQLAlchemy只会写回已更改的属性,而不是整个对象。

如果您使用set_attribute设置了一个属性,并且它与原始属性数据不同,则SQLAlchemy会发现对象是脏的(TODO:我需要详细信息,它是如何进行比较的):

代码语言:javascript
复制
   from sqlalchemy.orm.attributes import set_attribute
   set_attribute(obj, data_field_name, data)

如果要将对象标记为脏的,而不管原始属性值如何,无论它是否已更改,请使用flag_modified

代码语言:javascript
复制
   from sqlalchemy.orm.attributes import flag_modified
   flag_modified(obj, data_field_name)
票数 28
EN

Stack Overflow用户

发布于 2017-12-26 17:34:05

如果一个人知道属性有一个值,那么flag_modified方法就能工作。SQLAlchemy文档

将实例上的属性标记为“修改”。 这将在实例上设置“修改”标志,并为给定属性建立无条件的更改事件。该属性必须具有当前值,否则将引发InvalidRequestError。

从版本1.2开始,如果要标记整个实例,那么flag_dirty就是解决方案

在没有提到任何特定属性的情况下,将实例标记为“脏”。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29830229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档