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

