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

使用列表过滤从SQL Server导入数据到pandas dataframe时返回空表

问题原因排查
  • 核心逻辑错误:你在SQL语句里直接写了in ('test_list'),相当于查询Staff_Name_in_new_df_variable等于字符串'test_list'的记录,完全没有关联你提前生成的test_list变量的值,这是返回空表的最主要原因。
  • 潜在风险问题:直接拼接SQL字符串容易引发注入风险,同时如果列表里的姓名包含单引号会直接导致语法报错。
  • 拼写校验提醒:代码中出现的Varible_2拼写可能存在错误(标准拼写为Variable),字段名拼写错误也会导致查询结果为空。
正确实现方案

使用pandas的params参数做参数化查询,安全且自动处理特殊字符:

import pandas as pd
import pyodbc

test_list = previous_df["StaffName"].tolist()

# 空列表提前判断,避免后续SQL语法错误
if len(test_list) == 0:
    new_df = pd.DataFrame()
else:
    cnxn_str = ("Driver={XXXXXXXX};"
                "Server=XXXXXXXXXXXX;"
                "Database=XXXXXXXXX;"
                "UID=XXXXXXXXXX;"
                "PWD=XXXXXXXXXX;")
    cnxn = pyodbc.connect(cnxn_str)
    
    # 按列表长度生成对应数量的参数占位符
    placeholders = ', '.join('?' for _ in test_list)
    sql_query = f"""
    SELECT * 
    FROM XXXXXXXXXXXXXX
    WHERE Variable_1 in ('X1','X2','X3', 'X4') 
    AND Varible_2= 'XXXXXXX' 
    AND Staff_Name_in_new_df_variable in ({placeholders})
    """
    # 传入参数执行查询
    new_df = pd.read_sql(sql_query, cnxn, params=test_list)
    # 关闭连接
    cnxn.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:24:03