Python将元组批量插入MySQL表时遇SQL语法错误求助
问题分析与解决
错误根源
你的代码存在两个核心问题:
- SQL字符串拼接错误:三重引号包裹的SQL语句中,
"+ table +"是字符串字面量,不会被Python解析为变量替换,导致SQL语句中直接出现了无效的"+ table +"片段,这是触发语法错误的直接原因。 - 批量插入方式错误:手动拼接元组字符串的做法既不符合SQL语法规范,还存在严重的SQL注入风险,同时
%s占位符的使用方式完全错误。
修正后的代码
使用MySQLdb推荐的executemany方法实现安全高效的批量插入:
import MySQLdb # 建立数据库连接 connexion = MySQLdb.connect(host="127.0.0.1", user="myuser", password="mypass", database="mydb") cursor = connexion.cursor() # 表名确保为字符串类型 table = "mytablename" # 定义参数化的插入SQL语句,%s是MySQLdb的参数占位符(无需加引号) insert_sql = f"INSERT IGNORE INTO {table} (collection_date, var1, var2, value) VALUES (%s, %s, %s, %s)" # 批量执行插入,直接传入元组列表 cursor.executemany(insert_sql, tuples) # 提交事务并释放资源 connexion.commit() cursor.close() connexion.close()
关键说明
- 参数化查询:
%s会由MySQLdb自动处理类型转换和引号添加,避免SQL注入和语法错误。 - executemany优势:相比手动拼接SQL,该方法更高效,且能自动处理批量数据的格式。
- 表名注意事项:如果表名是动态生成的,需确保来源可信,避免SQL注入风险;固定表名直接写字符串即可。
内容的提问来源于stack exchange,提问作者Indi59
相关产品推荐
相关产品推荐

