Python从CSV生成SQL文件:解决字符串引号格式问题
解决Pandas生成SQL插入语句的单引号转义问题
核心需求
从CSV生成SQL文件时,需将字符串字段中的单引号转义为两个单引号,同时用单引号包裹字符串值,避免出现双引号格式。
解决方案步骤
1. 预处理CSV数据,替换单引号
遍历DataFrame中的所有字符串列,将单个单引号替换为两个单引号(SQL标准的单引号转义方式):
import pandas as pd # 读取目标CSV文件 df = pd.read_csv("target_dir/your_file.csv") # 处理所有字符串类型列的单引号转义 for col in df.select_dtypes(include=['object']).columns: df[col] = df[col].str.replace("'", "''", regex=False)
2. 手动生成符合要求的SQL语句
避免依赖pandas默认的to_sql方法(可能生成双引号),手动构造CREATE TABLE和INSERT INTO语句:
字段类型映射函数
先定义函数,将pandas数据类型映射为SQL数据类型:
def map_pandas_to_sql(dtype): if pd.api.types.is_integer_dtype(dtype): return "INT" elif pd.api.types.is_float_dtype(dtype): return "FLOAT" elif pd.api.types.is_string_dtype(dtype): return "VARCHAR(255)" elif pd.api.types.is_datetime64_dtype(dtype): return "DATETIME" else: return "VARCHAR(255)"
生成CREATE TABLE语句
table_name = "your_target_table" create_sql = f"CREATE TABLE {table_name} (\n" for col, dtype in df.dtypes.items(): create_sql += f" {col} {map_pandas_to_sql(dtype)},\n" # 移除最后一行的逗号并闭合语句 create_sql = create_sql.rstrip(",\n") + "\n);\n"
生成INSERT INTO语句
insert_sql = f"INSERT INTO {table_name} ({', '.join(df.columns)}) VALUES\n" for _, row in df.iterrows(): row_values = [] for val in row: if pd.isna(val): row_values.append("NULL") elif isinstance(val, str): # 直接用单引号包裹处理后的字符串 row_values.append(f"'{val}'") else: # 数值类型直接转字符串 row_values.append(str(val)) insert_sql += f" ({', '.join(row_values)}),\n" # 移除最后一行的逗号并闭合语句 insert_sql = insert_sql.rstrip(",\n") + ";\n"
3. 写入SQL文件
将生成的CREATE和INSERT语句写入目标.sql文件:
with open("output_table.sql", "w", encoding="utf-8") as sql_file: sql_file.write(create_sql) sql_file.write(insert_sql)
效果验证
处理后生成的INSERT语句会符合要求格式,例如:
('non_concerne','Non concerné(e)','information non possible ou non pertinente pour l''élément décrit')
内容的提问来源于stack exchange,提问作者pasqal
相关产品推荐
相关产品推荐

