You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用mysql.connector加载SQL文件报1064错误如何正确导入数据

mysql.connector导入SQL文件报1064语法错误解决方案

错误根因

当前逐行读取执行的逻辑完全不符合SQL执行规则:

  • SQL以分号;作为单条语句的结束标记,而非换行符
  • 示例中的CREATE TABLE语句跨越多行,逐行读取拿到的都是不完整的SQL片段,直接执行必然触发语法错误
  • 逐行读取会把语句末尾的分号和语句主体拆分,执行的内容不符合MySQL语法规范

正确实现代码

核心逻辑是读取全量SQL文件内容,按分号拆分出完整的单条语句,过滤空内容后逐个执行:

import mysql.connector

# 建立数据库连接,开启自动提交适配DDL语句执行
db = mysql.connector.connect(
    host="localhost",
    user="XXXX",
    passwd='XXXX',
    autocommit=True
)
mycursor = db.cursor()

# 一次性读取整个SQL文件内容,指定匹配的文件编码避免乱码
with open('Structure.sql', 'r', encoding='utf-8') as sql_file:
    full_sql = sql_file.read()

# 按分号拆分单条语句,过滤空内容、多余空白字符
sql_list = [statement.strip() for statement in full_sql.split(';') if statement.strip()]

# 遍历执行所有合法SQL语句
for single_sql in sql_list:
    mycursor.execute(single_sql)

# 释放资源
mycursor.close()
db.close()

适配复杂场景的补充说明

  • 如果SQL文件包含--单行注释、/* */块注释,需要在拆分语句前通过正则把注释内容替换为空,避免注释内容干扰SQL执行
  • 如果要导入的SQL包含存储过程、自定义函数这类内部自带分号的逻辑,可在调用execute()时传入multi=True参数直接执行全量SQL内容,不需要手动拆分
  • 读取SQL文件时必须指定和文件存储一致的编码格式,避免特殊字符、中文乱码触发语法错误
  • 执行完结构导入后如果需要批量导入数据,建议拼接批量INSERT语句执行,提升导入效率

内容的提问来源于stack exchange,提问作者Kacper Łęczyński

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:18:22