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.

В гугле ничего что могло помочь не нашел, каким еще способом можно просунуть данные в базу?


Ответы (0 шт):