2010-11-26 5 views
2

Ich benutze Pymssql, um Datenbank-Programmierung mit Python unter Linux zu tun.pymssql Problem - INSERT funktioniert nicht mit Parametern

Ich habe Probleme mit der Übergabe von Parametern an Abfragen. Dieses Problem scheint nur bei INSERT-Abfragen zu bestehen.

Dies funktioniert:

query = "SELECT col1, col2 FROM table WHERE col3=%s" 
cur.execute(query, (value,)) 

Aber dies nicht:

query = "INSERT INTO table (col1, col2) VALUES (%s, %s)" 
cur.execute(query, (value1, value2,)) 

Jede Idee, warum die INSERT-Abfrage wird nicht funktionieren? Hier

ist die Zurückverfolgungs:

Traceback (most recent call last): 
    File "test.py", line 46, in ? 
    cur.execute(query, (value1, value2,)) 
    File "/usr/lib/python2.4/site-packages/pymssql.py", line 126, in execute 
    self.executemany(operation, (params,)) 
    File "/usr/lib/python2.4/site-packages/pymssql.py", line 152, in executemany 
    raise DatabaseError, "internal error: %s" % self.__source.errmsg() 
pymssql.DatabaseError: internal error: None 
+0

Das gleiche Beispiel funktioniert für mich mit MySQL-Python 1.2.3, die mit Fedora 13 geliefert wird. – MarkR

+2

Es funktioniert zwar in MySQL, aber ich benutze MSSQL. :( – infrared

+0

Was sind die tatsächlichen Werte der Variablen value1 und value2? – Pondlife

Antwort

1

Stellt sich heraus, einer der Werte, die ich versucht wurde einzufügen vom Typ Unicode war. Als ich es mit Hilfe von str(value1) in eine Zeichenfolge umwandelte, funktionierte die Abfrage.

-1

Wie wäre es damit:

cur.execute(query % (value1, value2)) 
+3

Nein, das ist nicht wie dbi-api soll verwendet werden und führt zu SQL-Injection-Schwachstellen – MarkR

+0

Gut zu wissen - danke – VKolev

Verwandte Themen