我有一个事件模型,其中 external_id 设置为唯一。
session1 = create_session()
session2 = create_session()
e1 = Event(external_id=1, headline='session1')
session1.add(e1)
e2 = Event(external_id=1, headline='session2')
session2.add(e2)
session1.commit()
session2.commit()
s = create_session()
e = s.query(Event).filter_by(external_id=1).first()
print e.headline
我得到没有错误的输出“session1”,这意味着 session2.commit 静默失败。最终我想选择是否要覆盖数据库中的内容。因此,如果 session2.commit() 失败,我想选择是否在某些情况下更改插入以更新。任何人都可以帮助解决这个问题吗?谢谢。
编辑:我找到了答案。做到这一点的方法是通过双通道机制:两个会话都应该添加/提交具有最少信息的行(仅限唯一键)如果我们希望一个会话具有优先级,两个会话都应该进行查询并获取要更新的行,确保我们使用锁进行更新