Reputation: 6693
I have data
format like this:
[
{
"name":"abc",
"number":120,
"total":500
},
{
"name":"def",
"number":30,
"total":400
}
]
and I have a django query logic like this:
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'),
)
)
I want to use code to generate the When
part
so I use list comprehension to generate it, and then use ','.join(query_list)
to remove the bracket [
]
But here is problem : it said TypeError: sequence item 0: expected string, When found
I can't convert it to string , because When(name=data[499]['name'], then = Value(data[499]['number'])
should be a object.
How can I do to fix this???
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'),
)
)
Upvotes: 1
Views: 118
Reputation: 47354
Try unpack query_list
when passing it to Case
with *
syntax:
Case(*query_list, default=F('number')
Upvotes: 2