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

使用pymysql执行SQL模板时遇TypeError: can't concat list to bytes错误求助

解决pymysql执行SQL模板文件的类型错误

你遇到的TypeError: can't concat list to bytes错误,根源是**cur.execute()只接受单个SQL字符串作为参数**,但你用sql.split(';')把整个SQL文件拆成了列表,直接传给execute就会触发类型不匹配问题。

修复后的代码

import pymysql
import Settings

# 读取SQL模板文件,指定编码避免乱码
with open('Settings/databasetemplate.sql', 'r', encoding='utf-8') as sql_file:
    sql_content = sql_file.read()

# 连接数据库,建议指定字符集
conn = pymysql.connect(
    host='*****',
    user='*****',
    password='*****',
    charset='utf8mb4'
)
cur = conn.cursor()

try:
    # 分割SQL语句,过滤空行和单行注释
    sql_statements = [
        stmt.strip() 
        for stmt in sql_content.split(';') 
        if stmt.strip() and not stmt.strip().startswith('--')
    ]
    
    # 逐个执行有效SQL语句
    for stmt in sql_statements:
        cur.execute(stmt)
    conn.commit()
    print("所有SQL语句执行成功")
except Exception as e:
    conn.rollback()
    print(f"执行出错:{str(e)}")
finally:
    # 关闭游标和连接,释放资源
    cur.close()
    conn.close()

关键修复点

  • 分割SQL后过滤无效内容:去掉空字符串和--开头的单行注释,避免执行空语句报错
  • 循环执行单条SQL:execute()不支持批量传入列表,必须逐个执行每个语句
  • 增加异常处理:执行失败时回滚事务,避免数据不一致
  • 指定字符集:连接时添加charset='utf8mb4',解决中文乱码问题
  • 关闭连接:最后手动关闭游标和数据库连接,释放资源

内容的提问来源于stack exchange,提问作者Nixfee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:20:03