首页 > 解决方案 > 如何将多个sql代码捆绑到一个块中供python运行?

问题描述

我想通过运行 sql 的 python 脚本创建一个表,但想清除任何可能已经存在的同名表。下面的代码产生错误“mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册以获取在 'CREATE TABLE groceries 附近使用的正确语法( idint(11) NOT NULL AUTO_INCREMENT, itemvarchar(25) D' 在第 1 行"。

我可以让代码逐行单独工作,但不知道如何将它们全部组合到一个脚本中,以便它同时通过 python 运行。

import mysql.connector

db = mysql.connector.connect(
    host = "localhost",
    user= "test",
    password = 'test',
    database = "grocery"
)

cursor = db.cursor()
sql = "DROP TABLE IF EXISTS groceries, CREATE TABLE groceries(`id` int(11) NOT NULL AUTO_INCREMENT,`item` varchar(25) DEFAULT NULL, `name` varchar(25) DEFAULT NULL, `quantity` int(11) DEFAULT NULL,PRIMARY KEY (`id`))"




cursor.execute(sql)

标签: pythonmysql

解决方案


您收到语法错误,因为您使用逗号而不是分号来分隔DROP TABLE IF EXISTSandCREATE TABLE语句

如果您用分号分隔您的 SQL 语句,您将能够执行您的代码。

此外,您需要告诉您的连接器有多个语句multi=true

最终代码如下所示:

sql = """
DROP TABLE IF EXISTS groceries; 
CREATE TABLE groceries(
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `item` varchar(25) DEFAULT NULL, 
    `name` varchar(25) DEFAULT NULL, 
    `quantity` int(11) DEFAULT NULL,
     PRIMARY KEY (`id`)
)
"""

cursor.execute(sql, multi=true)

推荐阅读