You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL语句的WHERE IN子句中使用Python列表?

Python实现CSV值导入SQL IN条件的方案

环境准备

首先安装所需依赖:
pip install pandas
如果需要直连数据库执行SQL,还需要安装对应数据库的驱动(比如MySQL用pymysql,PostgreSQL用psycopg2-binary等)。

步骤1:读取CSV提取目标列值

import pandas as pd

# 替换为你的CSV文件实际路径
df = pd.read_csv("your_data.csv")
# 替换为你要用作过滤条件的列名,dropna用于过滤空值
target_list = df["your_filter_column"].dropna().astype(str).tolist()

步骤2:生成SQL查询语句

方案A:直接拼接SQL(适合自用、确认数据无注入风险的场景)

  • 过滤字段为字符串/日期类型(需要加单引号):
# 先处理值中的单引号,避免SQL语法错误
processed_list = [val.replace("'", "''") for val in target_list]
# 拼接IN子句内容
in_part = ", ".join([f"'{v}'" for v in processed_list])
# 生成完整SQL
sql_query = f"SELECT * FROM 你的表名 WHERE X IN ({in_part})"
  • 过滤字段为数值类型(无需加单引号):
in_part = ", ".join(target_list)
sql_query = f"SELECT * FROM 你的表名 WHERE X IN ({in_part})"

方案B:参数化查询(更安全,推荐生产环境使用)

不用手动处理转义、引号,还能避免SQL注入风险,以pandas+SQLAlchemy执行为例:

from sqlalchemy import create_engine

# 替换为你的数据库连接串
engine = create_engine("mysql+pymysql://用户名:密码@数据库地址:端口/库名")
# 生成对应数量的参数占位符
placeholders = ", ".join(["%s"] * len(target_list))
sql_query = f"SELECT * FROM 你的表名 WHERE X IN ({placeholders})"
# 传入参数执行查询
result_df = pd.read_sql(sql_query, engine, params=target_list)

补充说明:你的CSV只有800条记录,绝大多数数据库的IN子句长度限制都支持这个量级,不需要额外拆分。


内容的提问来源于stack exchange,提问作者mateusvl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:45:04