Python 中的 MySQL 错误语法


sql = """
DROP PROCEDURE
IF EXISTS schema_change;
delimiter ';;'
CREATE PROCEDURE schema_change() BEGIN
    if exists (select * from information_schema.columns where table_schema = 
    schema() and table_name = 'selectedairport' and column_name = 'GDP') 
    then
        alter table selectedairport drop column GDP;
    alter table selectedairport add column GDP DOUBLE;
end;;
delimiter ';'

CALL schema_change () ; DROP PROCEDURE
IF EXISTS schema_change ;
"""
cursor6.execute(sql)

但是,这会产生错误:

pymysql.err.ProgrammingError: (1064, "您的 SQL 语法有错误;检查与您的MySQL服务器版本相对应的手册,了解在"分隔符";;"附近使用的正确语法创建过程 schema_change(( 开始\(如果存在((在第 1 行选择 * f'"(

可能是什么问题?

execute() 方法(通常(一次只执行一个命令,因此脚本无法解析,反正不支持DELIMITER ; 在 GitHub 上看到这条评论。因此,一种解决方案是进行多次调用:

cursor6.execute("""
DROP PROCEDURE
IF EXISTS schema_change
""")
cursor6.execute("""
CREATE PROCEDURE schema_change() BEGIN
    if exists (select * from information_schema.columns where table_schema = 
    schema() and table_name = 'selectedairport' and column_name = 'GDP') 
    then
        alter table selectedairport drop column GDP;

注意:这里有一个语法错误,我们需要进一步添加:

    END IF;

现在像以前一样继续:

    alter table selectedairport add column GDP DOUBLE;
end
""")
cursor6.execute("""
CALL schema_change () 
""")
# Or cursor6.callproc('schema_change')
cursor6.execute("""
DROP PROCEDURE
IF EXISTS schema_change
""")

相关内容

  • 没有找到相关文章

最新更新