Ich habe data
Format wie folgt zusammensetzen:django Verwendung Fall, wenn SQL-Abfrage
[
{
"name":"abc",
"number":120,
"total":500
},
{
"name":"def",
"number":30,
"total":400
}
]
und ich habe eine django Abfragelogik wie folgt aus:
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'),
)
)
Ich möchte Verwenden Sie Code, um die When
Teil
zu generieren, damit ich Listen Comprehenti auf sich zu erzeugen, und dann ','.join(query_list)
verwenden, um den Halter [
]
Aber hier ist Problem zu beseitigen: Es wird gesagt TypeError: sequence item 0: expected string, When found
ich es in einem String konvertieren kann nicht, weil When(name=data[499]['name'], then = Value(data[499]['number'])
ein Objekt sein sollte. Wie kann ich das beheben?
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'),
)
)
Danke, es funktioniert 'Table.objects.update (Anzahl = Fall (default = F ('number'), * query_list)) ' – user2492364