django用例何时撰写sql查询

时间:2016-12-20 07:26:38

标签: python django

我有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'),
   )
)

1 个答案:

答案 0 :(得分:2)

在使用query_list语法将Case传递给*时尝试解压缩Case(*query_list, default=F('number')

{{1}}