小编Pan*_*izy的帖子

在原子块内调用的“select_for_update”仍然是 TransactionManagementError

代码一击

@transaction.atomic
def cancel_one(o_id):
    order= Order.objects.select_for_update().get(id=o_id)
Run Code Online (Sandbox Code Playgroud)

加注

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)
Run Code Online (Sandbox Code Playgroud)

代码结果

# Step1
-----------------------
DO
-----------------------

# Step2
-----------------------
DO
"We're inside a transaction!"
-----------------------
Run Code Online (Sandbox Code Playgroud)

django django-orm

1
推荐指数
1
解决办法
1000
查看次数

标签 统计

django ×1

django-orm ×1