source

pymysql.err.mariadb에 대한 단순 다중 행 SQL 쿼리의 ProgrammingError 1064

bestscript 2022. 11. 1. 21:43

pymysql.err.mariadb에 대한 단순 다중 행 SQL 쿼리의 ProgrammingError 1064

모든 것을 시도했지만 계속해서 다음 오류가 발생합니다.

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 명령줄에서 개별 라인을 사용해 봤는데 예상대로 작동하는 것 같습니다.frape.db.sql과 multisql(복수행 sql을 의미한다고 생각했지만 그렇지 않음)도 시도해 보았습니다.2행을 코멘트 아웃 하면, 3행에서도 에러가 발생합니다.방해해서 미안한데 몇 시간째 이걸 쳐다보고 있는데 알 수가 없어!

EDIT: 명백한 답은 다음과 같습니다만, 왜 원래 쿼리를 좋아하지 않는지 알고 싶습니다.

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개의 개별 명령어가 필요합니다.

BEGIN;
SELECT ... FOR UPDATE;  -- to keep other connections from messing with the row(s).
UPDATE ...;
DELETE ...
COMMIT;   -- do all of the above "atomically"

언급URL : https://stackoverflow.com/questions/59850393/pymysql-err-programmingerror-1064-in-simple-multiline-sql-query-for-mariadb