python - 如何将多个sql代码捆绑到一个块中供python运行?
问题描述
我想通过运行 sql 的 python 脚本创建一个表,但想清除任何可能已经存在的同名表。下面的代码产生错误“mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册以获取在 'CREATE TABLE groceries 附近使用的正确语法( id
int(11) NOT NULL AUTO_INCREMENT, item
varchar(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)
解决方案
您收到语法错误,因为您使用逗号而不是分号来分隔DROP TABLE IF EXISTS
andCREATE 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)
推荐阅读
- java - 我的笔记本电脑已将所有文件保存到类路径中。我该如何删除它?
- css - 在 CSS 中对齐三个元素
- json - typescript tsconfig 允许 .json 导入,构建文件 (.js) 不允许。是什么赋予了?
- python - 如何在 pydantic 中设置最大字符串字段长度约束?
- git - 大型monorepos上的Git和稀疏签出-隐藏稀疏签出规范的无关更改?(git-diff、git-log 等)
- javascript - Angular 的 IP 地址实用程序库
- python-3.x - 如何让子类从其父类继承一些方法和属性?
- java - 如何使用 Apache POI 对 XSSFTable 列启用排序/过滤?
- python - 从 np.random 分布中是否有一些种子可供选择?
- python - 根据Python中的条件过滤列表