使用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
相关产品推荐
相关产品推荐

