在Django 1.5.x中,我有一个长时间运行的管理命令,其中选择查询返回过时数据。我怀疑这是因为它们是在db connnection早期启动的事务中运行的。有没有办法判断查询是在事务中运行还是处于自动提交模式?
(这是我在https://stackoverflow.com/questions/18540099/orm-does-not-return-recent-database-changes发布的早期问题的一个更集中的版本)
答案 0 :(得分:14)
自Django 1.7起,Connection.in_atomic_block
将告诉您连接是否在事务内部。它似乎没有记录,但它在我的机器上工作:
from django.db import transaction
cxn = transaction.get_connection()
if cxn.in_atomic_block:
print "We're inside a transaction!"
答案 1 :(得分:1)
您可以通过查看is_managed
if transaction.is_managed():
print "tutsi frutsi!"
答案 2 :(得分:0)
自Django 1.6以来,您可以通过transaction.get_autocommit API判断您是否处于自动提交模式。
from django.db import transaction
if transaction.get_autocommit():
pass # We are in autocommit