3

バイナリデータを含む文字列オブジェクトをMySQLblob列に挿入したいと思います。ただし、MySQL構文エラーが発生し続けます。

デバッグ用に小さなスクリプトを作成しました。

import MySQLdb
import array
import random

conn = MySQLdb.connect(host="localhost", user="u", passwd="p", db="cheese")
cur = conn.cursor()

a = array.array('f')
for n in range(1,5):
    a.append(random.random())
bd = a.tostring()
print type(bd) # gives str
query = '''INSERT INTO cheese (data) VALUES (%s)''' % bd
cur.execute(query)

結果(毎回ではありません...)

ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near '?fJ\x95<=  
\xad9>\xf3\xec\xe5>)' at line 1")

問題は明らかに、MySQLが好まないバイナリデータの特定の文字に要約されます。バイナリデータをMySQLデータベースに入れるフェイルセーフな方法はありますか?

4

2 に答える 2

11

代わりに、次のようにしてください。

query = '''INSERT INTO cheese (data) VALUES (%s)'''
cur.execute(query, (bd,))

Pythonレベルの文字列フォーマットを行う代わりに、これはMySQL固有のフォーマットを使用します。これには、クエリに埋め込まれる文字列でMySQLにとって特別な意味を持つ文字をエスケープすることが含まれます。

于 2013-03-19T15:55:36.400 に答える
1

エラーは文字列のフォーマットではなく、SQL構文に関連しています。したがって、問題は文字ではなく、SQLクエリ自体にあると思います。query = '''INSERT INTO cheese (data) VALUES ('%s')''' % bd問題の文字列を一重引用符で囲む場合に使用します。

于 2013-03-19T16:07:25.420 に答える