我有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'),
)
)
答案 0 :(得分:2)
在使用query_list
语法将Case
传递给*
时尝试解压缩Case(*query_list, default=F('number')
:
{{1}}