python - 如何使用 python/Django 更新 MySQL 中的多行(CASE、WHEN、THEN)

标签 python mysql django

我昨天问了这个问题,但它并没有真正帮助我。我再次问它,希望这次我的问题更清楚。我正在尝试使用 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/

相关文章:

用于创建图像镜像并将其与一定量的白色混合的 Python 代码。

php - 需要将来自 3 个不同站点的 3 个数据库导入位于同一服务器上的第 4 个数据库

java - 添加新的数据源(mysql)wildfly

python - BeautifulSoup 提取

python - 在 python 2 中正确记录 unicode 和 utf-8 异常

python - Pandas 与重复的键合并 - 删除重复的行或阻止它的创建

mysql字符串转换返回0

python - 无法使用 json.loads() 在 Django 1.8 中从 request.body 创建列表

django - 发生 VsCode 异常 : VariableDoesNotExist

Django表单字段中的字符串列表