Python Django db事务集自动提交和连接最大年龄
我想做一个原子事务,我的数据库是PostgreSQL 到目前为止,我是如何进行交易的:Python Django db事务集自动提交和连接最大年龄,python,django,postgresql,transactions,Python,Django,Postgresql,Transactions,我想做一个原子事务,我的数据库是PostgreSQL 到目前为止,我是如何进行交易的: transaction.set_autocommit(False) try: do_stuff() transaction.commit() except: transaction.rollback() raise finally: transaction.set_autocommit(True) 医生说我可以这样做: with transaction.atomic(
transaction.set_autocommit(False)
try:
do_stuff()
transaction.commit()
except:
transaction.rollback()
raise
finally:
transaction.set_autocommit(True)
医生说我可以这样做:
with transaction.atomic():
do_stuff()
这两个代码是一样的吗
在我的settings.py
中有一个连接池CONN\u MAX\u AGE=60
以下场景会发生什么情况:
False
True
它与
transaction.atomic()
有什么不同吗?我建议使用transaction.atomic()
,因为它的目的正是做你想做的事情
您可以看到实现。最明显的区别是Django的版本支持使用保存点的“嵌套”事务。您可以相信,这段代码经过了良好的测试并得到了广泛的使用
对于您的场景,步骤2中的更新在任何一种情况下都应该有效,因为自动提交应用于数据库连接级别,并且两个并发请求将使用不同的数据库连接。一个重要的区别是,成功的内部原子块仍然可以由外部原子块回滚(例如,如果您已将原子_请求设置为True)。