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

如何用Python生成符合MySQL批量插入格式的数据加载文件?

用Python将CSV数据格式化为MySQL INSERT语句

问题背景

现有如下CSV数据:

id, name, age
1, John, 40
2, Mary, 23
3, Alex, 34

需要将其转换为MySQL官方示例格式的INSERT语句:

INSERT INTO tbl_name (a,b,c)
    VALUES(1,2,3), (4,5,6), (7,8,9);

使用Pandas的df.to_csv(quoting=csv.QUOTE_NONNUMERIC)仅能为非数值字段添加引号,但无法实现每行数据用括号包裹、多组值用逗号分隔的要求,且保存时分隔符会被引号干扰,需要针对性处理。


解决方案1:逐行拼接SQL片段

直接遍历DataFrame的每一行,手动处理字段格式并拼接成符合要求的SQL结构:

import pandas as pd

# 读取CSV文件
df = pd.read_csv('data.csv')

# 配置表名和字段列表
table_name = 'your_table_name'
column_str = ', '.join(df.columns)

# 生成VALUES部分的每一项
value_list = []
for _, row in df.iterrows():
    processed_fields = []
    for val in row:
        # 字符串字段加单引号,数值直接转字符串
        if isinstance(val, str):
            # 处理字符串中的单引号,避免SQL语法错误
            processed_val = val.replace("'", "''")
            processed_fields.append(f"'{processed_val}'")
        else:
            processed_fields.append(str(val))
    # 拼接成(字段1, 字段2, 字段3)格式
    value_list.append(f"({', '.join(processed_fields)})")

# 组合成完整的INSERT语句
final_sql = f"INSERT INTO {table_name} ({column_str})\n    VALUES{', '.join(value_list)};"

# 输出或保存结果
print(final_sql)
with open('insert_statement.sql', 'w', encoding='utf-8') as f:
    f.write(final_sql)

解决方案2:用apply简化行处理

利用Pandas的apply函数批量处理每行数据,减少循环代码:

import pandas as pd

df = pd.read_csv('data.csv')
table_name = 'your_table_name'
column_str = ', '.join(df.columns)

# 定义行处理函数
def format_single_row(row):
    processed_fields = []
    for val in row:
        if isinstance(val, str):
            processed_val = val.replace("'", "''")
            processed_fields.append(f"'{processed_val}'")
        else:
            processed_fields.append(str(val))
    return f"({', '.join(processed_fields)})"

# 生成所有值片段并拼接
values_str = ', '.join(df.apply(format_single_row, axis=1))
final_sql = f"INSERT INTO {table_name} ({column_str})\n    VALUES{values_str};"

print(final_sql)

关键注意点

  • 若字符串字段包含单引号(如O'Conner),必须替换为两个单引号'O''Conner',否则会导致SQL语法错误
  • 读取CSV时可通过dtype参数指定字段类型,避免数值被误读为字符串:
    df = pd.read_csv('data.csv', dtype={'id': int, 'age': int, 'name': str})
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:12:49