python - 在 sqlalchemy 中强制对象为 `dirty`

标签 python sqlalchemy

有没有办法强制将 sqlalchemy 映射的对象视为?例如,给定 sqlalchemy 的上下文 Object Relational Tutorial问题得到证明,

a=session.query(User).first()
a.__dict__['name']='eh'
session.dirty

屈服,

IdentitySet([])

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

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

最佳答案

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

对象本身并不脏,但它们的属性才是。据我所知,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)

关于python - 在 sqlalchemy 中强制对象为 `dirty`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29830229/

相关文章:

postgresql - SqlAlchemy:使用 `get or create` 模式锁定表

python - 如何在Python中循环遍历另一个数组内的一个数组的长度?

python - 有什么方法可以将用C++创建的变量加载到python解释器中吗?

python - SQLAlchemy 过滤器 in_ 运算符

python - sqlalchemy 在删除之前更新另一个模型

python - 在Connection.execute sqlalchemy中运行UPDATE SET参数化sql语句

python - Flask-SQLAlchemy 一对多关系找不到名称

c++ - 使用高度图扭曲图像?

python - 阴影效果在 QMainWindow 中不起作用

javascript - 具有透明度、多边形、读取图像像素的简单图形 API?