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

问题描述 投票:2回答:3

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

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

django django-orm
3个回答
1
投票

您可以通过检查is_managed来检查您是否在交易中

if transaction.is_managed():
    print "tutsi frutsi!"

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!"

0
投票

从Django 1.6开始,您可以通过transaction.get_autocommit API判断您是否处于自动提交模式。

from django.db import transaction

if transaction.get_autocommit():
    pass  # We are in autocommit
© www.soinside.com 2019 - 2024. All rights reserved.