我已尝试了所有方法,但不断出现以下错误:
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注入),默认情况下,MariaDB(和MySQL)服务器不支持执行多个SQL语句
为了支持多个语句的执行,客户端需要向服务器发送
COM_SET_OPTION
命令和MYSQL_OPTION_MULTI_STATEMENTS_ON
标志,这是PyMySQL不支持的不要尝试在调用中运行多个语句
一定要使用
BEGIN
和COMMIT
一定要使用
FOR UPDATE
您需要5个单独的命令:
相关问题 更多 >
编程相关推荐