Ich möchte folgende SQL-Abfrage in Django verwenden, aber ich konnte das nicht verwenden, nachdem ich direkt mit Raw SQL versucht habe. Das SQL funktioniert direkt während der Ausführung im PostgreeSQL Abfragefenster, aber auf Django hat es nicht funktioniert.Wie schreibe ich eine rohe SQL-Abfrage in Django QuerySet?
Das SQL soll vor 22522 einen unmittelbar niedrigeren Wert finden. Ich möchte das im QuerySet Format oder in Raw SQL verwenden. SQL-Abfrage unten
hinzugefügtSELECT id, name, zip FROM region WHERE zip>=(SELECT max(zip) FROM region
WHERE zip<22522) AND zip<=(SELECT min(zip) FROM region WHERE zip>22522)
ORDER BY zip ASC LIMIT 1
Hier ist der Code, den ich im Raw-Abfrageformat verwendet habe. Ich sah, jede andere einfache SQL-Abfrage innerhalb der c.execute()
Druckergebnisdaten korrekt.
from django.db import connection
with connection.cursor() as c:
c.execute("SELECT id, name, zip FROM region WHERE zip>=(SELECT max(zip)
FROM region WHERE zip<22522) AND zip<=(SELECT min(zip) FROM region
WHERE zip>22522) ORDER BY zip ASC LIMIT 1")
for row in c.fetchall():
print(row[1])
Was ist der Fehler (bitte vollständige Rückverfolgung) – thebjorn
Es gibt keinen Grund, warum Sie keine rohe Abfrage verwenden sollten. Aber anstatt einen Cursor zu verwenden, mache MyModel.objects.raw (..), das dir immer noch die volle Macht für Django gibt. – e4c5