代码打击
@transaction.atomic
def cancel_one(o_id):
order= Order.objects.select_for_update().get(id=o_id)
提高
TransactionManagementError('select_for_update不能在事务外部使用。')
django.db.transaction.TransactionManagementError:select_for_update不能在事务外部使用。
我已通过transaction.get_connection().in_atomic_block.
检查我的代码正在交易中
它出现在交易中,但仍在筹集
错误:django.db.transaction.TransactionManagementError:select_for_update不能在事务外部使用。
我的代码:
# Step1
def cancel_one(o_id):
print("DO")
cxn = transaction.get_connection()
if cxn.in_atomic_block:
print("We're inside a transaction!")
order= Order.objects.select_for_update().get(id=o_id)
# Step2
@transaction.atomic
def cancel_one(o_id):
print("DO")
cxn = transaction.get_connection()
if cxn.in_atomic_block:
print("We're inside a transaction!")
order= Order.objects.select_for_update().get(id=o_id)
代码结果
# Step1
-----------------------
DO
-----------------------
# Step2
-----------------------
DO
"We're inside a transaction!"
-----------------------
答案 0 :(得分:1)
您是否有机会使用DBRouters?我遇到了麻烦-诀窍是在事务上定义数据库并选择select_for_update
with transaction.atomic(using='db_x'):
order = Order.objects.using('db_x').select_for_update().get(id=o_id)