2010-11-26 18 views
2

私はLinux上でPythonでデータベースプログラミングを行うためにpymssqlを使用しています。pymssqlの問題 - INSERTがパラメータで動作しない

パラメータをクエリに渡す際に問題があります。この問題は、INSERTクエリでのみ存在するようです。

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

をしかし、これはしていません::

これは動作しますINSERTクエリが動作しませんなぜ

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

任意のアイデアを?ここで

はトレースバックです:これについて

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

同じ例がFedora 13に同梱されているMySQL-python 1.2.3で動作します。 – MarkR

+2

実際にはMySQLで動作しますが、私はMSSQLを使用しています。 : – infrared

+0

変数value1とvalue2の実際の値は何ですか? – Pondlife

答えて

1

は、私はタイプユニコードであった挿入しようとしていた値のいずれかをオンにします。 str(value1)を使用して文字列に変換すると、クエリが機能しました。

-1

方法:

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

いいえ、それは方法ではありませんdbi-apiが使用されるはずであり、SQLインジェクションの脆弱性につながるでしょう。 – MarkR

+0

お気軽にお礼を言う - ありがとう – VKolev

関連する問題