首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加载sql文件时出错-如何通过python正确地从sql文件加载数据

问加载sql文件时出错-如何通过python正确地从sql文件加载数据
EN

Stack Overflow用户
提问于 2022-06-25 13:36:33
回答 2查看 120关注 0票数 0

我在使用mysql.connector将sql文件加载到数据库时遇到了问题--代码并不复杂,但每次都会收到表单错误:

代码语言:javascript
复制
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

该文件如下所示:

代码语言:javascript
复制
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;

我用于将数据加载到数据库中的代码是:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2022-06-25 13:43:15

您需要加载整个查询,并且只需要执行它:

代码语言:javascript
复制
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)

另一个选项是分别执行每个查询:

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 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命令行客户端作为子进程运行它:

代码语言:javascript
复制
subprocess.run(['mysql', '-e', 'source Structure.sql'])

您可能需要mysql客户端的其他选项,如用户、密码、主机等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72754307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档