Я новичок в 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
- это капля, если это не ясно.