我昨天问了这个问题,但它并没有真正帮助我。我再次问它,希望这次我的问题更清楚。我正在尝试使用 WHEN、THEN、ELSE 大小写更新 MySQL 中的多行。我正在尝试在后端使用 python 和 Django 来实现这一点。这是我的代码:
UPDATE priority
SET priority_order =
CASE priority_order
WHEN 4 THEN 8
WHEN 1 THEN 4
WHEN 3 THEN 2
## More X amount of WHEN/THEN statements
ELSE priority_order
END
问题是我不知道我有多少 WHEN 和 THEN 行..我如何构造这样的语句以便我可以使用cursor.execute( ) 执行它?
昨天,有人建议构建一个表达式列表并作为参数传递,例如:
from django.db.models import Case, When
# Make a list of When expressions
when_list = [When(priority_number=2, then=3),
When(priority_number=3, then=4)]
# Use in a query of your choice, as an example:
Model.objects.update(
priority_number=Case(
*when_list))
但是好像在Mysql上不起作用。我认为这只适用于 SQLLite。当我的查询执行时, *when_list 没有被解码。请帮忙!
最佳答案
你能尝试一下吗:
when_data = [(2, 3), (3, 4), ] # Your method for generate the data
when_list = [When(priority_number=a, then=b) for a, b in when_data]
default = 90000 # Your value here
# Change YourModel
qs = YourModel.objects.update(priority_number=Case(
*when_list,
default=default
))
# Now you can look on sql string
from django.db import connection
print (connection.queries[-1])
关于python - 如何使用 python/Django 更新 MySQL 中的多行(CASE、WHEN、THEN),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46371166/