2010-11-26 4 views
2

J'utilise pymssql pour faire de la programmation de base de données avec Python sous Linux.Problème pymssql - INSERT ne fonctionne pas avec les paramètres

Je rencontre des problèmes pour passer des paramètres aux requêtes. Ce problème semble seulement exister avec les requêtes INSERT.

Cela fonctionne:

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

Mais cela ne:

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

Toute idée pourquoi la requête INSERT ne fonctionne pas?

Voici le retraçage:

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

Le même exemple fonctionne pour moi avec MySQL-python 1.2.3 fourni avec Fedora 13. – MarkR

+2

Il fonctionne bien en MySQL, mais j'utilise MSSQL. :( – infrared

+0

Quelles sont les valeurs réelles des variables value1 et value2? – Pondlife

Répondre

1

Turns sur l'une des valeurs que je tentais d'insérer était de type unicode. Lorsque je l'ai converti en chaîne, en utilisant str(value1), la requête a fonctionné.

-1

Que diriez-vous ceci:

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

Non, ce n'est pas ça dbi-api est supposé être utilisé et conduira à des vulnérabilités d'injection SQL – MarkR

+0

Bon à savoir - merci – VKolev

Questions connexes