2016-03-30 6 views
4

Ich versuche, eine rohe Abfrage auszuführen, die dynamisch erstellt wird. Um sicherzustellen, dass die Parameter an der gültigen Position eingefügt werden, verwende ich benannte Parameter.Django: Verwenden von benannten Parametern für eine rohe SQL-Abfrage

Dies scheint für Sqlite ohne Probleme zu arbeiten. (Alle meine Tests erfolgreich) Aber wenn ich den gleichen Code gegen MariaDB laufen bin nicht it ..

Ein einfaches Beispiel Abfrage:

SELECT u.* 
    FROM users_gigyauser AS u 
    WHERE u.email like :u_email 
    GROUP BY u.id 
    ORDER BY u.last_login DESC 
    LIMIT 60 OFFSET 0 

Parameter sind:

{'u_email': '%test%'} 

Der Fehler Ich bekomme einen Standard-Syntaxfehler, da der Parameter nicht ersetzt wird. Ich habe versucht, ‚%‘ als Indikator verwendet wird, aber dies führte zu SQL versucht

%u[_email] 

zu analysieren und eine Art Fehler zurückgegeben.

ich die Ausführung der Abfrage wie:

raw_queryset = GigyaUser.objects.raw(self.sql_fetch, self._query_object['params']) 

Oder beim Zählen:

cursor.execute(self.sql_count, self._query_object['params']) 

Beide geben den gleichen Fehler auf MariaDB aber die Arbeit auf SQLite (mit dem ':' Indikator)

Nun, was fehlt mir?

+0

mit% (u_email), wie in der Dokumentation angegeben (https://docs.djangoproject.com/en/1.8/topics/db/sql /) führt zu einem "unvollständigen Format" Fehler btw –

+1

die Dokumentation sagt '% (u_email) s' (beachten Sie das Suffix' s') – yedpodtrzitko

+0

TNX !!!!! Wenn Sie diesen Kommentar als Antwort eingeben, kann dies als Antwort markiert werden. –

Antwort

4

edit:

Das Format s Suffix folgend haben muss:

%(u_email)s 
+0

Es gibt einen Grund, das ORM nicht zu verwenden, .. und es ist ein gutes. Ich habe keine Angst vor SQL-Injektion ... so ist das auch kein Problem. –

+0

Würde es Ihnen etwas ausmachen, den "guten Grund" zu teilen? – yedpodtrzitko

+2

Django Orm ist nett für die einfachen Objekt bezogenen Datenbankabfragen. Wenn Ihre Datenbankstruktur jedoch weiter entwickelt wird und Sie genaue Berichte/Selektionen generieren müssen, werden die Dinge schlecht. Ich muss spezielle Selektionen basierend auf einem dynamischen JSON-Objekt generieren .. generiert von einem Javascript-Tool –

Verwandte Themen