使用 Mysql Connector 通过 Python 创建 Mysql Storec 过程

问题描述 投票:0回答:1

我正在构建一个小型应用程序。我需要使用 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.

任何帮助将不胜感激。

python mysql mysql-connector mysql-5.7
1个回答
0
投票

尝试删除分号

;
并替换为
//

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

© www.soinside.com 2019 - 2024. All rights reserved.