IN-Klausel mit ganzen Zahlen in sqlalchemy / psycopg2

8

Nur ein Anfänger mit der Python / Postgres-Combo, also vergib mir, wenn das trivial ist. Ich führe eine rohe SQL-Abfrage mit sqlalchemy durch:

%Vor%

Im folgenden Beispiel habe ich self.ids als Tupel mit String oder Ganzzahlen sowie als Array mit String oder ganzen Zahlen probiert. Wie auch immer, es hat nicht funktioniert.

Wenn ich diese Zeile verwende:

%Vor%

Ich bekomme den Fehler:

%Vor%

Irgendwelche Vorschläge?

    
ScottyUCSD 24.10.2009, 05:43
quelle

5 Antworten

7

Sie können die Methode cur.mogrify verwenden:

%Vor%     
Pykler 18.12.2012 21:34
quelle
6

Ich habe SqlAlchemy für gerade psycopg2 gelöscht, also weiß ich nicht, ob es zu 100% gilt. Was ich herausfand, war, dass psycopg2 die IN-Klausel korrekt kompiliert, wenn Sie ihr ein Tupel und nicht ein Array / eine Liste übergeben. Ich habe ein Tupel von ganzen Zahlen übergeben und es hat gut funktioniert.

    
ScottyUCSD 29.10.2009 21:56
quelle
3

Der Platzhalter %s in execute erwartet einen Skalar, kein Tupel. Sie müssen es entweder durch ','.join(('%s',) * len(mytuple)) ersetzen oder stattdessen die String-Substitution verwenden!

    
Alex Martelli 24.10.2009 05:57
quelle
2

Wenn Ihre IDs in einer Liste sind, können Sie die Listenadaption verwenden:

%Vor%

Entnommen aus Listen-Anpassung

    
Tadzys 29.01.2015 13:50
quelle
0

Wenn self.ids ein Array ist, haben Sie ein Problem mit der Konvertierung innerhalb der Anweisung execute. Stattdessen sollten Sie es als Zeichenfolgenoperation ausführen, bevor Sie die Anweisung execute aufrufen.

Versuchen Sie Folgendes:

%Vor%     
vy32 24.10.2009 12:43
quelle

Tags und Links