1

我有一个事件模型,其中 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() 失败,我想选择是否在某些情况下更改插入以更新。任何人都可以帮助解决这个问题吗?谢谢。

编辑:我找到了答案。做到这一点的方法是通过双通道机制:两个会话都应该添加/提交具有最少信息的行(仅限唯一键)如果我们希望一个会话具有优先级,两个会话都应该进行查询并获取要更新的行,确保我们使用锁进行更新

4

0 回答 0