Python MySQL (PyMySQL) Вставка BLOB в таблицу
Мне нужно хранить файлы (такие как png, jpeg, wav) в БД используя PyMySQL.
Я составляю запрос:
insert_common_info_query = '''INSERT INTO %s VALUES (NULL, %s, %s)'''
insert_common_info_query_args = (
db_settings['db_resource_table'],
self.quote(self.resource_obj.data),
self.quote(self.resource_obj.mime),
)
cursor.execute(insert_common_info_query, insert_common_info_query_args)
# ....
def quote(self, a):
if type(a) == int:
return str(a)
elif type(a) == bool:
if a == None:
return 'NULL'
else:
return str(a).lower()
elif a:
return self.db_link.escape(a)
else:
return 'NULL'
При выполнении которого появляется ошибка:
Traceback (most recent call last):
File "enex_parse.py", line 105, in <module>
print("Saved %d notes" % parse_file(sys.argv[1], db_user, db_password, db_server, db_name))
File "enex_parse.py", line 45, in parse_file
note_db_proxy.insert()
File "/home/r2d2/proj/python/evernote_parser/evernote_parser/db_proxy.py", line 130, in insert
resource_db_proxy.insert(commit = False)
File "/home/r2d2/proj/python/evernote_parser/evernote_parser/db_proxy.py", line 219, in insert
cursor.execute(insert_common_info_query, insert_common_info_query_args)
File "/home/r2d2/proj/python/evernote_parser/venv/lib/python3.5/site-packages/pymysql/cursors.py", line 170, in execute
result = self._query(query)
File "/home/r2d2/proj/python/evernote_parser/venv/lib/python3.5/site-packages/pymysql/cursors.py", line 328, in _query
conn.query(q)
File "/home/r2d2/proj/python/evernote_parser/venv/lib/python3.5/site-packages/pymysql/connections.py", line 517, in query
self._affected_rows = self._read_query_result(unbuffered=unbuffered)
File "/home/r2d2/proj/python/evernote_parser/venv/lib/python3.5/site-packages/pymysql/connections.py", line 732, in _read_query_result
result.read()
File "/home/r2d2/proj/python/evernote_parser/venv/lib/python3.5/site-packages/pymysql/connections.py", line 1075, in read
first_packet = self.connection._read_packet()
File "/home/r2d2/proj/python/evernote_parser/venv/lib/python3.5/site-packages/pymysql/connections.py", line 684, in _read_packet
packet.check_error()
File "/home/r2d2/proj/python/evernote_parser/venv/lib/python3.5/site-packages/pymysql/protocol.py", line 220, in check_error
err.raise_mysql_exception(self._data)
File "/home/r2d2/proj/python/evernote_parser/venv/lib/python3.5/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.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 ''resources' VALUES (NULL, 44, '?PNG\\r\\n\\Z\\n\\0\\0\\0\\rIHDR\\0\\0\x05\\0\\0\\0\x04\\0\x08\x03\\0\\0\\0?M\x04' at line 1")
Это происходит из-за данных поля BLOB в которое я хочу записать файл.
Если не применять функцию quote, то ошибка такая же.
Если не засовывать данные в кавычки, то тоже.
Сами данные получаются декодированием из кодировки base64.
В гугле ничего что могло помочь не нашел, каким еще способом можно просунуть данные в базу?