Вставить двоичный объект в Python строку в BLOB в MySQL
Я хотел бы вставить строковый объект, содержащий двоичные данные, в столбец blob MySQL. Тем не менее, я продолжаю получать синтаксические ошибки 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 '?fJx95<=
xad9>xf3xecxe5>)' at line 1")
Проблема, по-видимому, сводится к определенным символам в двоичных данных, которые MySQL не любит. Существует ли безотказный способ ввода двоичных данных в базу данных MySQL?
2 ответов:
Сделайте это так, а не так:
query = '''INSERT INTO cheese (data) VALUES (%s)''' cur.execute(query, (bd,))Вместо того, чтобы выполнять форматирование строк на уровне Python, это использует форматирование, специфичное для MySQL, включая экранирование символов, которые имеют особое значение для MySQL в строках, которые должны быть встроены в запросы.
Ошибка связана не с формированием строки, а с синтаксисом AN SQL. Поэтому я думаю, что проблема заключается в самом SQL-запросе,а не в символах. Используйте
query = '''INSERT INTO cheese (data) VALUES ('%s')''' % bd, когда вы заключаете рассматриваемую строку в одну кавычку.
Comments