【发布时间】:2015-09-13 23:22:30
【问题描述】:
This source 详细介绍了如何使用关联代理来创建具有 ORM 对象值的视图和对象。
但是,当我附加一个与数据库中现有对象匹配的值时(并且该值是唯一的或主键),它会创建一个冲突的对象,因此我无法提交。
所以在我的情况下,这仅作为视图有用,我需要使用 ORM 查询来检索要附加的对象。
这是我唯一的选择还是我可以使用合并(如果它是主键而不是唯一约束,我可能只能这样做),或者设置构造函数以使其使用数据库中的现有对象如果它存在而不是创建一个新对象?
例如来自文档:
user.keywords.append('cheese inspector')
# Is translated by the association proxy into the operation:
user.kw.append(Keyword('cheese inspector'))
但我想被翻译成更像:(当然查询可能会失败)。
keyword = session.query(Keyword).filter(Keyword.keyword == 'cheese inspector').one()
user.kw.append(keyword)
理想情况下
user.kw.append(Keyword('cheese inspector'))
session.merge() # retrieves identical object from the database, or keeps new one
session.commit() # success!
我想这甚至可能不是一个好主意,但在某些用例中可能是这样的:)
【问题讨论】:
标签: sqlalchemy