Загрузка изображения в базу данных mariadb - PullRequest
0 голосов
/ 16 июня 2020

Я новичок в sql, так что, возможно, это просто ошибка новичка, но, попробовав некоторые решения, которые я нашел здесь и там, я все еще не могу решить эту проблему. Я пытаюсь загрузить изображение в базу данных mariadb с помощью сценария python, который выглядит следующим образом:

import mysql.connector
path=input("File to upload: ")
with open(path,'rb') as f:
 fileData=f.read()
query=f"UPDATE emp SET image={fileData} WHERE empId=1;"
db=mysql.connector.connect(...)
myCursor=db.cursor()
myCursor.execute(query)
myCursor.close()
db.close()
print(f"Uploaded {path} to the database...")

Однако, когда код достигает myCursor.execute(query), я получаю следующую ошибку:

Traceback (most recent call last):
  File "webSqlSampleClient.py", line 16, in <module>
    myCursor.execute(query)
  File "/home/asriel/.local/lib/python3.8/site-packages/mysql/connector/cursor.py", line 551, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "/home/asriel/.local/lib/python3.8/site-packages/mysql/connector/connection.py", line 490, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "/home/asriel/.local/lib/python3.8/site-packages/mysql/connector/connection.py", line 395, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): 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 'b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xe1\x00'' at line 1

Что не так с моим кодом? Остальная часть запроса кажется правильной, поскольку я успешно использовал тот же оператор UPDATE с другими значениями, не относящимися к изображению. Заранее благодарим вас за помощь.

-Update:

Как предложил @tadman, я использовал% s в качестве заполнителя в моем запросе sql, поэтому новый код выглядит как это:

query="UPDATE emp SET image=%s WHERE empId=1"
db=mysql.connector.connect(...)
myCursor=db.cursor()
myCursor.execute(query, (fileData,))
myCursor.close()
db.close()

Приведенный выше код не запускает никаких исключений и печатает предполагаемый результат, однако, когда я выполняю следующий оператор SQL в моем SQL клиенте:

SELECT image 
FROM emp 
WHERE empId = 1;

он говорит, что значение для изображения NULL.

Что не так? image - это капля, если это не ясно.

1 Ответ

0 голосов
/ 18 июня 2020

Хорошо, так что я только что получил работу: ответ, который я использовал для решения первой проблемы, был ответом @tadman (который находится в комментариях к вопросу). Проблема, с которой я столкнулся с тем, что база данных не обновляла свои значения, была решена добавлением db.commit() (я забыл об этом, глупая ошибка). В любом случае спасибо за все ваши полезные комментарии!

...