【发布时间】:2016-03-15 13:52:03
【问题描述】:
目标:创建一个跟踪/跟踪另一个对象的 SQLAlchemy 属性更改的 SQLAlchemy 属性。
给定:
class ClazzA():
attributeA = Column(JSONDict)
class ClazzB():
attributeB = Column(?)
objectA = ClazzA()
objectA.attributeA = {'foo': 1}
objectB = ClazzB()
objectB.attributeB = objectA.attributeA
objectA.attributeA['foo'] = 2
JSONDict 与 MutableDict 相关联,如下所述:http://docs.sqlalchemy.org/en/latest/orm/extensions/mutable.html#module-sqlalchemy.ext.mutable,即 JSONDict 类型允许突变跟踪。
所以我们在 objectA 上有了这个字典,它的变化正在被 SQLAlchemy 记录。我希望attributeB 跟踪attributeA,这样即使应用程序重新启动(即从DB 重新加载属性),attributeB 也将继续反映对attributeA 的字典所做的更改。
当然,这与 Python doesn't have an idea of pointers.我想知道 SQLAlchemy 是否有针对这个特定问题的解决方案。
【问题讨论】:
-
ClazzB是另一个型号吗?您需要保留该模型吗? -
@univerio 是的,ClazzB 也需要持久化。
-
您的模型
ClazzA和ClazzB在数据库级别有什么明确的关系吗?换句话说,如果我们只是得到一个像“ClazzA.attributeA was changed for this instance”这样的事件,有没有办法说“这个 ClazzA 实例与那个 ClazzB 实例相关”? -
@Ilja 这将是解决方案的一部分。在
__init__的objectB(或更高版本)期间,我们会将其指向objectA 上的预期/配对/匹配属性。attributeB只会指向ClazzA类型的对象上的attributeA,只是直到运行时我们才知道哪个objectA。 -
@ChaimKut 听起来很像您正在寻找的是 ForeignKey + ClazzB 上的属性。
标签: python sqlalchemy