我正在构建一个小型应用程序。我需要使用 mysql 连接器通过 python 创建 MySQL 存储过程。
我尝试过以下代码。但出现以下错误
“命令不同步;您现在无法运行此命令。”
我正在使用MySQL版本
5.7.40-43-log
下面是我尝试过的Python代码片段。
import mysql.connector
mydb = mysql.connector.connect(host=HOST,user=USERNAME,passwd=PASSWORD,database=DBNAME,port=PORT,allow_local_infile=True)
cursor = mydb.cursor()
sqlquery = """DROP PROCEDURE IF EXISTS usp_myprocedure;
DELIMITER //
CREATE PROCEDURE usp_myprocedure()
BEGIN
TRUNCATE TABLE mytable;
INSERT INTO mytable
SELECT col1
,col2
,col3
,col4
,CASE WHEN New_col='%_%' THEN logic1
ELSE logic2
END AS mylogic
FROM oldtable;
SELECT * FROM mytable;
END //
DELIMITER ;
"""
cursor.execute(sqlquery)
mydb.commit()
上面的 MySQL 代码在通过 Mysql Workbench 运行时工作正常。但是在通过 python mysql 连接器执行时出现错误
Commands out of sync; you can't run this command now.
任何帮助将不胜感激。
尝试删除分号
;
并替换为 //
sqlquery = """DROP PROCEDURE IF EXISTS usp_myprocedure //
DELIMITER //
CREATE PROCEDURE usp_myprocedure()
BEGIN
TRUNCATE TABLE mytable;
INSERT INTO mytable
SELECT col1
,col2
,col3
,col4
,CASE WHEN New_col='%_%' THEN logic1
ELSE logic2
END AS mylogic
FROM oldtable;
SELECT * FROM mytable;
END //
DELIMITER ;
"""
例如,如果您正在使用 mysql_use_result() 并在调用 mysql_free_result() 之前尝试执行新查询,则可能会发生这种情况。如果您尝试执行两个返回数据的查询而不在其间调用 mysql_use_result() 或 mysql_store_result() ,也可能会发生这种情况。
https://dev.mysql.com/doc/refman/8.0/en/commands-out-of-sync.html