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)的主要内容,如果未能解决你的问题,请参考以下文章