2017-03-20 2 views
2

als mein erster Beitrag hier möchte ich warnen, dass ich so gut wie ich im Internet sah, aber nichts, das es gelöst.SqlObject und SqlBuilder IN() -Funktion mit String-Werten

Ich benutze Python 2.7 und die neueste Version von sqlobject lib.

ich konfrontierte, dass, wenn das IN() Funktion mit einer Liste oder Tupel von Strings aufrufen, haben Sie ein Ergebnis, das wie ein Fehler aussieht:

from sqlobject.sqlbuilder import table, IN 

t = table.MyTable 
print(IN(t.s_ID, ("1", "2"))) 
>>> <SQLOp 34ec648L> 

Während mit ganzen Zahlen in besser zu funktionieren scheint:

print(IN(t.s_ID, (1, 2))) 
>>>> ((MyTable.s_ID) IN (1, 2)) 

Hat jemand eine Idee, warum das nicht funktioniert? Ich denke mehr über ein Problem in der lib aber vielleicht fehlt mir etwas

Vielen Dank im Voraus!

Anmerkung: Ich halte es nicht für in diesem Fall so wichtig (wie ich nur die Abfrage aufbauen will), aber ich mag diese Abfrage auf SQL Server 2012

D. FE senden.

Antwort

1

Sieht aus wie Ihre beiden Aussagen korrekt sind. Aber die Darstellung der ersten (die Strings enthält) ist datenbankabhängig - sie hängt davon ab, wie Strings in Abfragen für jede spezifische Datenbank dargestellt werden (wie sie zitiert, maskiert usw. sind). Daher kann es nicht in ein Zeichenfolgenobjekt konvertiert werden, das kein db-aware-Objekt ist, wie zum Beispiel eine Verbindung oder ein Modell - das Objekt, das die Methode sqlrepr hat. Im nächsten Beispiel __connection__ Objekt ist eine Postgresql-Verbindung:

>>> print(__connection__.sqlrepr(IN(t.s_ID, ("1", "2"))) 
((MyTable.s_ID) IN ('1', '2')) 
+0

Vielen Dank für die Beantwortung. Ich werde versuchen, ein Verbindungsobjekt zu instanziieren (ich benutze es momentan nicht, da ich bereits einen SQL-Client mit pypyodbc entwickelt habe) – DFE

Verwandte Themen