【发布时间】:2012-07-20 19:22:27
【问题描述】:
我对数据库比较陌生。我确信这是经验会回答的问题。
我将 SQLAlchemy 与 PostgreSQL 一起使用。我设置了一个系统,其中分布在多台计算机上的多个进程执行各种任务,然后更新数据库。我在测试中还没有遇到任何事务冲突,但理论上它们仍然是可能的。
根据我在 Google 上找到的信息,看来我要么必须获得数据库锁,要么准备重新启动事务。不幸的是,关于如何执行此操作的宝贵信息很少。
我假设,要重新启动事务,SQLAlchemy 会抛出一些异常,我的代码必须捕获该异常,并自行执行重试。如果我违反了唯一性约束,表明我的代码中存在错误而不是事务冲突,那么该异常是否与 SQLA 抛出的异常不同?使用数据库锁会更好吗?
提前致谢!
-- 编辑--
我刚刚了解了“ConcurrentModificationError”。这个名字确实听起来像我正在寻找的例外。 The documentation 说它是 StaleDataError 的别名,它的名字听起来还是对的,但它的文档非常不透明。这是我要查找的错误吗?
再次,非常感谢!
【问题讨论】:
标签: python postgresql concurrency transactions sqlalchemy