[PYTHON] Model.objects.extra muss berücksichtigt werden, bevor Raw SQL mit Django verwendet wird

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

Model.objects.extra muss berücksichtigt werden, bevor Raw SQL mit Django verwendet wird
Schritte zur Entwicklung von Django mit VSCode
Standardisieren Sie HTML, um mit Django gemietet zu werden
Wie fange ich mit Django an?
[Django 2.2] Fügen Sie neuen Posts mit einem Datum mithilfe eines Vorlagenfilters ein neues Abzeichen hinzu
So führen Sie eine arithmetische Verarbeitung mit der Django-Vorlage durch
Schritt Notizen, um mit Django zu beginnen
App-Entwicklung mit SQLite mit Django (PTVS)
Führen Sie Raw SQL mit Redash unter Verwendung der Python-Datenquelle aus und zeigen Sie das Ergebnis an
Versuchen Sie, mit WebSocket mit Django (Swamp Dragon) eine Todo-Verwaltungssite zu erstellen.
[In-Database Python Analysis-Lernprogramm mit SQL Server 2017] Schritt 2: Importieren Sie Daten mit PowerShell in SQL Server
Der einfachste Weg, um mit Django zu beginnen
Versuchen Sie, mit django-import-export csv-Daten zu django hinzuzufügen
So entwickeln Sie eine Cart-App mit Django
[Django] So erhalten Sie Daten durch Angabe von SQL.
So implementieren Sie "named_scope" von RubyOnRails mit Django
Laden Sie Bilder mit tkinter mit GUI auf S3 hoch