我在使用mysql.connector将sql文件加载到数据库时遇到了问题--代码并不复杂,但每次都会收到表单错误:
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1该文件如下所示:
DROP DATABASE IF EXISTS `mydb`;
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
CREATE TABLE IF NOT EXISTS `mydb`.`Users` (
`UserID` VARCHAR(8) NOT NULL,
`UserFName` VARCHAR(45) NOT NULL,
`UserLName` VARCHAR(45) NOT NULL,
`USER_TYPE` VARCHAR(1) NOT NULL,
`Password` VARCHAR(45) NOT NULL,
`DateCreated` DATE NOT NULL,
PRIMARY KEY (`UserID`))
ENGINE = InnoDB;我用于将数据加载到数据库中的代码是:
import mysql.connector
db = mysql.connector.connect(
host="localhost",
user="XXXX",
passwd = 'XXXX',
)
mycursor = db.cursor()
file = open('Structure.sql', 'r')
for line in file:
if line.strip():
mycursor.execute(line)发布于 2022-06-25 13:43:15
您需要加载整个查询,并且只需要执行它:
import mysql.connector
db = mysql.connector.connect(
host="localhost",
user="XXXX",
passwd = 'XXXX',
)
mycursor = db.cursor()
with open('Structure.sql', "r") as f:
query = f.read()
mycursor.execute(query)另一个选项是分别执行每个查询:
import mysql.connector
db = mysql.connector.connect(
host="localhost",
user="XXXX",
passwd = 'XXXX',
)
mycursor = db.cursor()
with open('Structure.sql', "r") as f:
queries = f.read()
for query in queries.split(";"):
mycursor.execute(query)发布于 2022-06-25 13:59:46
SQL脚本可能包括客户端内置命令:https://dev.mysql.com/doc/refman/8.0/en/mysql-commands.html。
MySQL的SQL解析器不理解客户端命令。
因此,不能使用cursor.execute()执行SQL脚本的所有行,因为这直接指向动态SQL接口。
必须使用MySQL命令行客户端作为子进程运行它:
subprocess.run(['mysql', '-e', 'source Structure.sql'])您可能需要mysql客户端的其他选项,如用户、密码、主机等。
https://stackoverflow.com/questions/72754307
复制相似问题