Mit der Python-DB-API-Spezifikation können Sie Parameter der execute () -Methode übergeben. Teil meiner Aussage ist eine WHERE IN-Klausel und ich habe ein Tupel verwendet, um das IN zu füllen. Zum Beispiel:
%Vor%Wenn ich jedoch in eine Situation komme, in der das Parameter-Tupel nur ein Tupel von 1 Element ist, schlägt die Ausführung fehl.
ProgrammingError: FEHLER: Syntaxfehler bei oder nahe ")"
Zeile 13: WHERE ID IN (3,)
Wie kann ich das Tupel richtig mit Klausel arbeiten?
Bearbeiten: Bitte machen Sie, wie @rspeer in einem Kommentar erwähnt, Vorkehrungen, um sich vor SQL-Injection-Angriffen zu schützen.
Testen mit pg8000 (eine DB-API 2.0-kompatible Pure-Python-Schnittstelle zur PostgreSQL-Datenbank-Engine):
Dies ist die empfohlene Methode, um mehrere Parameter an eine "IN" -Klausel zu übergeben.
%Vor%Eine weitere Bearbeitung (vollständig getestet und funktionierendes Beispiel):
%Vor%Dies ist möglicherweise keine Antwort auf genau die Frage, die Sie gestellt haben, aber ich denke, dass es das Problem lösen kann, das Sie haben.
Pythons DB-API scheint Ihnen keine Möglichkeit zu geben, Tupel als sicher ersetzte Parameter zu übergeben. Die akzeptierte Antwort von bernie verwendet den Operator Python %
für die Ersetzung, was unsicher ist.
Sie müssen jedoch möglicherweise keine Tupel als Parameter übergeben, insbesondere wenn das gewünschte Tupel das Ergebnis einer anderen SQL-Abfrage ist (wie Sie Daniel angedeutet haben). Stattdessen können Sie SQL-Unterabfragen verwenden.
Wenn die Menge der IDs, die Sie in Ihrer IN-Klausel angeben möchten, das Ergebnis von SELECT id FROM other_table WHERE use=true
ist, zum Beispiel:
Und das kann auch parametrisiert werden (der sichere Weg). Wenn die IDs, die Sie auswählen möchten, diejenigen mit einem gegebenen parent_id
sind:
Tags und Links python postgresql