我想做一个原子事务,我的数据库是PostgreSQL。
到目前为止,我一直在进行交易:
transaction.set_autocommit(False)
try:
do_stuff()
transaction.commit()
except:
transaction.rollback()
raise
finally:
transaction.set_autocommit(True)
Doc说我可以这样做:
with transaction.atomic():
do_stuff()
两个代码是否相同?
我的CONN_MAX_AGE=60
中有一个连接池settings.py
。
以下情况会发生什么:
False
True
我的更新是否会存活下来?
与transaction.atomic()
会有所不同吗?
答案 0 :(得分:1)
我建议使用transaction.atomic()
,因为它的目的是做你想要的事情。
您可以看到实施here。最明显的区别是Django的版本支持使用保存点的“嵌套”事务。您可以相信此代码经过了充分测试和广泛使用。
关于您的方案,步骤2中的更新应该在两种情况下都存在,因为自动提交适用于数据库连接级别,并且两个并发请求将使用不同的数据库连接。