pymysql.err.programmingError: (1064)
Posted
技术标签:
【中文标题】pymysql.err.programmingError: (1064)【英文标题】: 【发布时间】:2021-12-11 23:48:28 【问题描述】:我一直坚持将 blob 存储到 xampp 服务器中。这是我遇到的错误。
pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '5\\xd2\\xe0\\xe5yllN\\xbc\\xa7!\\x11!\\x16\\xcftaJ\\xd1\\x863\\xbf\\x9a\\x9aF\\x83\\xe8\\xc9\\...' at line 2")
这是应该将 blob 保存到 xampp 中的函数。数据类型在 xampp 中设置为 mediumblob。我正在使用 tkinter,此功能绑定到一个按钮。
def save_to_db():
get_id_no = id_no_var.get()
get_first_name = first_name_var.get()
get_middle_name = middle_name_var.get()
get_last_name = last_name_var.get()
get_course = course_var.get()
raw_qr_code_id = str(get_id_no + get_first_name + get_middle_name + get_last_name + get_course)
final_qr_code_id = str(raw_qr_code_id.replace(" ", ""))
filename = (final_qr_code_id + ".png")
raw_image = (filename)
image = open(raw_image, 'rb')
image_binary = image.read()
cursor.execute("""INSERT INTO `student_information` (`id_no`, `first_name`, `middle_name`, `last_name`, `course`, `qr_code_id`, `qr_code_blob`)
VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')""" % (get_id_no, get_first_name, get_middle_name, get_last_name, get_course, final_qr_code_id, image_binary))
connect_db.commit()
【问题讨论】:
你的不同函数返回什么?调试的第一个好方法是将查询存储在变量中,然后在使用cursor.execute
执行之前打印它
很抱歉没有将所有内容都放在上下文中。我正在使用 tkinter,并且此功能绑定到一个按钮。这个想法是通过简单地单击按钮将包括 blob 在内的所有条目保存到 xampp 服务器中。除了 BLOB 错误,一切似乎都运行良好。如果我从函数中删除那个 blob,一切都会很好地写入服务器。抱歉,代码结构草率,我是编程新手。
您的字段 (qr_code_blob) 是否定义为 BLOB?你能在查询字符串和值元组之间用,
代替%
尝试cursor.execute
吗
二维码为PNG文件格式。我正在尝试将 PNG 文件作为 BLOB 存储到 xampp 中。
仍然出现错误。
【参考方案1】:
这是我设法插入数据的方法: 我首先创建了一个表(由于我的图片大小,使用了 LONGBLOB 类型):
MariaDB [DB]> create table TEST ( id int, file_file LONGBLOB);
然后二值化一张图片
image = open('/home/med/Pictures/Screenshot from 2019-12-19 12-48-53.png', 'rb')
image_binary = image.read()
之后我使用了以下查询(注意查询周围的单引号和 %s
周围的双引号)
connection.execute('''INSERT INTO TEST (`id`, `file_file`) VALUES ("%s", "%s")''', (1, image_binary))
# <sqlalchemy.engine.cursor.LegacyCursorResult at 0x7f2b24165580>
检查注入是否有效
MariaDB [DB]> select count(*) from TEST;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.001 sec)
MariaDB [DB]>
【讨论】:
非常感谢。我终于找到了问题所在。它与 """INSERT INTO.....""" 以及 '%s' 和之后的 % 的组合有关。至于为什么会这样,还是有点模糊。显然,使用 "..." 和 """...""" 存储字符串时,字符串的行为会有所不同,一旦我完成,将深入研究这一点。我很高兴这个错误被修复了。谢谢!以上是关于pymysql.err.programmingError: (1064)的主要内容,如果未能解决你的问题,请参考以下文章