如何判断您的选择查询是否在交易中?

时间:2013-08-31 02:58:28

标签: django django-orm

在Django 1.5.x中,我有一个长时间运行的管理命令,其中选择查询返回过时数据。我怀疑这是因为它们是在db connnection早期启动的事务中运行的。有没有办法判断查询是在事务中运行还是处于自动提交模式?

(这是我在https://stackoverflow.com/questions/18540099/orm-does-not-return-recent-database-changes发布的早期问题的一个更集中的版本)

3 个答案:

答案 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