在Django 1.5.x中,我有一个长时间运行的管理命令,其中选择查询返回过时数据。我怀疑这是因为它们是在db connnection早期启动的事务中运行的。有没有办法判断查询是在事务中运行还是处于自动提交模式?
(这是我在https://stackoverflow.com/questions/18540099/orm-does-not-return-recent-database-changes发布的早期问题的更集中的版本)
您可以通过检查is_managed
来检查您是否在交易中
if transaction.is_managed():
print "tutsi frutsi!"
从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!"
从Django 1.6开始,您可以通过transaction.get_autocommit API判断您是否处于自动提交模式。
from django.db import transaction
if transaction.get_autocommit():
pass # We are in autocommit