如何遍历Excel全表读取单元格值 基于pandas批量生成SQL插入语句
解答
不需要引入其他额外依赖库,你当前已经在使用的pandas完全可以实现逐行读取单元格、批量生成目标SQL插入语句的需求,无需安装其他包。
实现逻辑
你已经通过pd.read_excel()把整张工作表加载为DataFrame结构,直接调用pandas内置的遍历方法即可逐行拿到所有单元格的值,核心注意点:
- 字符串类型的字段值需要用单引号包裹,数值、布尔类字段不需要额外加引号
- 字符串内容如果自带单引号(比如品牌名
O'Neal),需要把单引号转义为两个单引号,否则会触发SQL语法错误 - 单元格为空值时,需要转换为SQL标准的
NULL值 - 列名可以直接从DataFrame的
columns属性获取,不需要手动硬编码,避免列顺序、列名写错的问题
可直接运行的代码
基于你已写的脚本修改即可:
import pandas as pd # 读取Excel文件,和你现有逻辑完全一致 df = pd.read_excel('July_Sales.xlsx') # 定义要插入的目标表名 target_table = "CurrentOffers" # 预先拼接INSERT语句的固定前缀,自动读取列名拼接 column_part = ', '.join(df.columns) sql_prefix = f"INSERT INTO {target_table}({column_part})\nVALUES " # 逐行遍历生成SQL语句 for _, row in df.iterrows(): value_parts = [] for col_name in df.columns: cell_value = row[col_name] # 区分值类型做格式化 if isinstance(cell_value, str): # 转义字符串内的单引号 safe_value = cell_value.replace("'", "''") value_parts.append(f"'{safe_value}'") else: # 空值转NULL,其余数值类型直接转字符串 value_parts.append("NULL" if pd.isna(cell_value) else str(cell_value)) # 拼接单行完整SQL full_insert_sql = f"{sql_prefix}({', '.join(value_parts)});" # 打印SQL,也可以选择写入.sql文件保存 print(full_insert_sql)
运行效果
用你给出的示例数据运行,第一行生成的SQL完全匹配你的预期:
INSERT INTO CurrentOffers(Id, Title, Make, Model, isCurrent) VALUES (1, 'Red Ranger', 'Ford', 'Ranger XLT', 1);
如果需要更高的插入效率,也可以把所有行的value部分收集到列表里,最后拼接成一条多值插入的SQL,减少数据库执行的语句数量。
内容的提问来源于stack exchange,提问作者SkyeBoniwell
相关产品推荐
相关产品推荐

