Ich habe manchmal darüber nachgedacht, eine Django-Rohabfrage zu erstellen.
Zum Beispiel, wenn Sie das anhand der Spalte berechnete Ergebnis verwenden möchten, anstatt die Spalte in SELECT oder WHERE anzugeben.
Ich war so in Schwierigkeiten.
Ah, das ORM-Objekt hat eine rohe Methode ... nun,
entities = Entity.objects.raw("SELECT concat_ws(',', id, name) AS mystr FROM entities WHERE name IN %s", params=(list(names),))
Ist es okay? Die in IN angegebene Liste wird jedoch nicht bestanden. Hmm,
https://docs.djangoproject.com/ja/1.9/ref/models/expressions/#raw-sql-expressions
Aber es funktioniert nicht ...
Als ich ein bisschen mehr suchte, fand ich so etwas.
https://docs.djangoproject.com/ja/1.9/ref/models/querysets/#django.db.models.query.QuerySet.extra
Mit diesem,
entities = Entity.objects.extra(
select={'mystr': "concat_ws(',', id, name)"},
where=['name IN %s'],
params=[list(names)]
)
Es fühlt sich an, als könnte ich ein bisschen besser schreiben als roh.
Jedoch ...!
Use this method as a last resort
This is an old API that we aim to deprecate at some point in the future. Use it only if you cannot express your query using other queryset methods.
Weil es das gibt, ist es vielleicht besser, es nicht zu benutzen ...
https://docs.djangoproject.com/ja/1.9/ref/models/expressions/#raw-sql-expressions
Sieht besser aus
Recommended Posts