使用Python导入.csv到MySQL时出现参数未使用错误求助
解决方案
1. 占位符使用错误mysql-connector-python的标准占位符是%s,?是sqlite3等其他数据库驱动的格式,改回正确的占位符:
insert_data = ( "INSERT INTO company_calculations.bs_import_test(ticker, date_updated, bs_section, yr_0, yr_1, yr_2, yr_3, yr_4, yr_5, yr_6, yr_7, yr_8, yr_9, yr_10, yr_11, yr_12, yr_13, yr_14, yr_15)" "VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" )
2. 校验字段与占位符数量匹配
确认INSERT的字段数(19个)和VALUES里的占位符数完全一致,少写或多写都会触发参数不匹配错误。
3. 数据类型适配
检查CSV数据类型与MySQL表字段是否兼容,比如date_updated如果是字符串格式,需要先转换为datetime:
df['date_updated'] = pd.to_datetime(df['date_updated'])
4. 改用批量插入提升效率
逐行插入效率极低,推荐用executemany批量处理:
# 提取目标列并转为元组列表 data_list = [tuple(row) for row in df[['ticker', 'date_updated', 'bs_section', 'yr_0', 'yr_1', 'yr_2', 'yr_3', 'yr_4', 'yr_5', 'yr_6', 'yr_7', 'yr_8', 'yr_9', 'yr_10', 'yr_11', 'yr_12', 'yr_13', 'yr_14', 'yr_15']].values] mycursor.executemany(insert_data, data_list) db.commit()
5. 调试技巧
如果仍报错,打印data_inputs的长度,确认参数数量是否为19:
print(len(data_inputs)) # 预期输出19
内容的提问来源于stack exchange,提问作者Part_Time_Nerd
相关产品推荐
相关产品推荐

