Django用例何时编写sql查询

2024-04-25 12:07:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我的data格式如下:

[
 {
  "name":"abc",
  "number":120,
  "total":500
 },
 {
  "name":"def",
  "number":30,
  "total":400
 }

]

我的django查询逻辑如下:

Table.objects.update(
      number = Case(
          When(name=data[0]['name'], then=Value(data[0]['number'])),
          When(name=data[1]['name'], then=Value(data[1]['number'])),
          When(name=data[2]['name'], then = Value(data[2]['number'])),
          ...
          When(name=data[499]['name'], then = Value(data[499]['number'])),
          default=F('number'),
      )
  )

我想使用代码来生成When部分

所以我使用列表理解来生成它,然后使用','.join(query_list)删除括号[]
但问题是:上面写着TypeError: sequence item 0: expected string, When found

我无法将其转换为字符串,因为When(name=data[499]['name'], then = Value(data[499]['number'])应该是一个对象。 我该怎么做才能解决这个问题???你知道吗

query_list = [When(name=data[i]['name'], then=Value(data[i]['number'])) for i,item in enumerate(data)]

part_of_sql= ','.join(query_list)
print(part_of_sql)


Table.objects.update(
   number=Case(
     part_of_sql, 
     default=F('number'),
   )
)

Tags: ofnamenumbersqldataobjectsvaluetable