python - mariadb 的简单多行 SQL 查询中的 pymysql.err.ProgrammingError 1064

标签 python mariadb erpnext

我已经尝试了一切,但不断收到此错误:

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
'INSERT INTO tabSingles (doctype, field, value) VALUES ('Bank Reconciliation', 'a' at line 2")

扩展查询(Python格式扩展后):

SELECT value INTO @var FROM tabSingles WHERE doctype = 'Bank Reconciliation' AND field = 'bank_account';
INSERT INTO tabSingles (doctype, field, value) VALUES ('Bank Reconciliation', 'account', @var);
DELETE FROM tabSingles WHERE doctype = 'Bank Reconciliation' AND field = 'bank_account';

谁能看出问题所在吗?多行查询有问题吗?我已经尝试了 mariadb 命令行上的各个行,它们似乎按预期工作。我还尝试了 frappe.db.sql 和 multisql (以为它意味着多行 sql,但事实并非如此)。如果我注释掉第 2 行,第 3 行也会出错。很抱歉打扰,但我已经盯着它看了好几个小时了,无法弄清楚!

编辑: 显而易见的答案是这样的,但我仍然想知道为什么它不喜欢原始查询:

UPDATE tabSingles SET field='{new_name}' WHERE doctype='{doctype}' AND field='{old_name}';

最佳答案

出于安全原因(主要是 SQL 注入(inject)),MariaDB(和 MySQL)服务器默认不支持执行多个 SQL 语句。

为了支持多语句执行,客户端需要向服务器发送 COM_SET_OPTION 命令和 MYSQL_OPTION_MULTI_STATEMENTS_ON 标志,PyMySQL 不支持此功能。

关于python - mariadb 的简单多行 SQL 查询中的 pymysql.err.ProgrammingError 1064,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59850393/

相关文章:

python - PyQt 优雅的命令行参数解析

python - Bokeh 传奇卷轴

python - 拥有一个可供所有线程使用的全局队列(或列表)

mysql - 统计特定月份每天的所有记录

mysql - sqlfiddle.com 5.5.30 和 MariaDB 5.5.31 中的不同结果

mysql - 如何检查当前用户是否具有 MySQL/MariaDB 的特定权限?

python - 另一个 ImportError : attempted relative import with no known parent package

linux - 无法打开内核策略/etc/selinux/targeted/active/policy.kern 进行读取

python - 有没有办法让mariadb与python2.7连接

open-source - 最高效的 ERPNext 安装方法