在MySQL blob中插入Python二进制字符串对象。

17 浏览
0 Comments

在MySQL blob中插入Python二进制字符串对象。

我想将包含二进制数据的字符串对象插入到 MySQL blob 列中。然而,我一直得到 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•<= ­9>óìå>)' at line 1")

问题显然在于二进制数据中的某些字符不被 MySQL 接受。有没有一种安全可靠的方法将二进制数据存储到 MySQL 数据库中?

admin 更改状态以发布 2023年5月20日
0
0 Comments

错误与字符串的格式无关,而与SQL语法有关。
因此,我猜问题出在SQL查询本身上,而不是字符上。
使用query ='''INSERT INTO cheese (data) VALUES ('%s')''' % bd将涉及的字符串用单引号括起来。

0
0 Comments

要这样做,而不是那样做:

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

不要使用Python级别的字符串格式化,而是使用MySQL特定的格式化方式,包括对那些在要嵌入查询的字符串中对MySQL具有特殊意义的字符进行转义。

0