AFAIK merge执行和insert or update
所以我所做的非常简单。
集线器和标签之间有1到N的关系。
因此,当我尝试在tag和hub上进行合并时,hub运行得很好,从DB加载现有的hub并进行更新,但当执行db.session.merge(nuevo_tag)
时失败,并引发异常,因为幕后试图进行插入,即使标记先前存在。
我做错了什么?在
nuevo_hub = Hub(guid_hub,name,location,comments,id_project,creado_en,actualizado_en)
merged_hub = db.session.merge(nuevo_hub)
#db.session.commit() # If I use this line tags perform an insert.
nuevo_tag = Tag(guid_tag,project,merged_hub,TYPE_HUB,creado_en,actualizado_en)
merged_tag = db.session.merge(nuevo_tag)
db.session.commit()
如果我删除db.session.commit()
,则显示其他错误:
^{pr2}$sqlalchemy.orm.exc.FlushError: New instance with identity key (, (b'\x11\x0e\x84\x00\xe2\x9b\x11\xd4\xa7\x16DfUD\x00\r',)) conflicts with persistent instance
我在docs找到了答案。 考虑Hub是Item的一个子类。 我必须将backref lazy从joined改为dynamic。在
换句话说,我必须避免在同一个会话中有一个持久性对象的两个副本。在
相关问题 更多 >
编程相关推荐