如何用Python基于数据集生成按2条语句拆分的SQL文件?
按行分组生成SQL文件的Python实现方案
需求说明
- 现有如下数据集:
Col A Col B Col C Nanana Teacher 123456 Popopo Student 232322 Cecece Teacher 455433 Lalala Student 231231 Poasls Teacher 235433 Lilili Teacher 723543 - 生成多个
.sql文件,每个文件包含2条格式为SELECT function({0},{1},{2})的SQL语句,每条语句对应数据集的一行数据 - 按顺序每2行存入一个SQL文件,文件名格式为
FUNCTION_1.sql、FUNCTION_2.sql等
原代码存在的问题
- 文件名定义错误:未用字符串包裹,正确写法应为
file_name = "FUNCTION_{}.sql" - 缩进错误:内层
for循环未缩进,不符合Python代码块规则 - 行索引逻辑错误:直接使用
y作为索引会重复读取前2行,需根据当前文件序号计算对应行的位置 - DataFrame索引方式错误:
df[y, "COL B"]不是合法的索引方式,应使用df.loc或df.iloc - SQL语句格式缺失:生成的语句缺少结尾分号和换行,会导致SQL语法错误
修正后的完整代码
import pandas as pd # 加载数据集(如果已有df可跳过此部分) data = [ ["Nanana", "Teacher", 123456], ["Popopo", "Student", 232322], ["Cecece", "Teacher", 455433], ["Lalala", "Student", 231231], ["Poasls", "Teacher", 235433], ["Lilili", "Teacher", 723543] ] df = pd.DataFrame(data, columns=["Col A", "Col B", "Col C"]) file_name = "FUNCTION_{}.sql" query_template = "SELECT function('{0}', '{1}', {2});\n" # 计算需要生成的文件数量,兼容行数为奇数的情况 total_files = (len(df) + 1) // 2 for file_num in range(total_files): # 确定当前文件对应的行范围 start_row = file_num * 2 end_row = start_row + 2 current_rows = df.iloc[start_row:end_row] with open(file_name.format(file_num + 1), 'w') as f: for _, row in current_rows.iterrows(): # 格式化SQL语句,字符串字段添加单引号保证语法正确 sql_query = query_template.format(row["Col A"], row["Col B"], row["Col C"]) f.write(sql_query)
代码说明
- 用
(len(df) + 1) // 2计算文件数量,即使数据集行数为奇数也能正确处理剩余行 - 通过
df.iloc[start_row:end_row]精准定位每个文件对应的行组,避免重复读取数据 - 为字符串类型字段添加单引号,符合SQL语法规范
- 每条语句结尾添加分号和换行,提升SQL文件的可读性和合法性
内容的提问来源于stack exchange,提问作者Yohanes Lim
相关产品推荐
相关产品推荐

