以下代码实现了用 Pandas 读取 Excel并按要求生成分批的 SQL WHERE 条件importpandasaspdimportnumpyasnpfrommathimportceildefbuild_condition(field,value):根据字段值和类型构造单个条件片段ifpd.isna(value):returnf{field}IS NULL# 处理日期时间类型ifisinstance(value,(pd.Timestamp,np.datetime64)):# 转换为 SQL 标准格式的字符串val_strpd.to_datetime(value).strftime(%Y-%m-%d %H:%M:%S)returnf{field} {val_str}# 处理字符串类型ifisinstance(value,str):# 转义单引号替换为一个单引号为两个单引号escapedvalue.replace(,)returnf{field} {escaped}# 处理数值类型int, float, np.numberifisinstance(value,(int,float,np.number)):returnf{field}{value}# 其他情况例如布尔值等作为字符串处理val_strstr(value).replace(,)returnf{field} {val_str}defgenerate_where_batches(df,batch_size100): 将 DataFrame 的每一行转换为 AND 连接的条件组 每 batch_size 个组用 OR 连接为一批返回批次的列表 fieldsdf.columns.tolist()row_conditions[]for_,rowindf.iterrows():# 构建单个行的条件列表conds[]forfieldinfields:condbuild_condition(field,row[field])conds.append(cond)# 用 AND 连接并加上括号形成一个条件组group( AND .join(conds))row_conditions.append(group)# 分批每 batch_size 个组用 OR 连接batches[]foriinrange(0,len(row_conditions),batch_size):batch_groupsrow_conditions[i:ibatch_size]batch_str OR .join(batch_groups)batches.append(batch_str)returnbatches# ------------------- 使用示例 -------------------if__name____main__:# 请替换为实际的 Excel 文件路径excel_filedata.xlsx# 读取 Excel默认读取第一个 sheetdfpd.read_excel(excel_file)# 生成批次条件每 100 条记录为一批batchesgenerate_where_batches(df,batch_size100)# 打印输出每一批foridx,batchinenumerate(batches,start1):print(f--- 第{idx}批 (WHERE 条件部分) ---)print(batch)print()# 空行分隔主要特性说明空值处理pd.isna()检测缺失值生成字段 IS NULL。字符串与日期字符串值用单引号包裹内部单引号替换为两个单引号日期时间格式化为YYYY-MM-DD HH:MM:SS并加单引号。数字整数、浮点数直接拼接不加引号。分批输出每 100 个行条件组用OR连接为一批打印时按批次输出。使用前准备安装依赖若未安装pipinstallpandas openpyxl将脚本中的excel_file路径改为你的 Excel 文件实际路径。运行脚本即可看到控制台输出的分批 WHERE 条件。示例输出片段假设 Excel 有三行数据nameagecreated_atJohn302023-01-01 10:00:00NULL25NULLO’Brien402023-02-01 12:30:00生成的第一批此处只有 3 条仍按 100 条分一批--- 第 1 批 (WHERE 条件部分) --- (name John AND age 30 AND created_at 2023-01-01 10:00:00) OR (name IS NULL AND age 25 AND created_at IS NULL) OR (name OBrien AND age 40 AND created_at 2023-02-01 12:30:00)注意OBrien被正确转义为OBrien。