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

如何在pandas 1.5.1中为read_sql_query传递bool和int类型的params参数

Pandas 1.5.1中read_sql_query传递非字符串参数的类型错误解决办法

问题描述

Pandas 1.5.1里read_sql_query的params参数类型被定义为list[str] | dict[str, str] | None,而1.4.4版本没有明确类型限制。之前在1.4.4中,我用包含bool类型变量is_simple和int类型变量lookback的列表作为params(代码:pandas.read_sql_query(sql=file.read(), con=connection, params=[is_simple, lookback]))能通过PyCharm检查,但升级到1.5.1后,代码检查提示类型错误,因为期望是list[str]。但我的SQL Server脚本需要接收INT类型的is_simple和lookback,该怎么正确传递这两种类型的参数?

解决办法

1. 临时忽略PyCharm类型提示

如果确认参数传递逻辑没问题(SQL Server能正确解析bool/int),可以用注释跳过类型检查:

# noinspection PyTypeChecker
pandas.read_sql_query(sql=file.read(), con=connection, params=[is_simple, lookback])

或者给参数加类型注释强制兼容:

params: list[int | bool] = [is_simple, lookback]
pandas.read_sql_query(sql=file.read(), con=connection, params=params)

2. 改用字典形式传递(推荐)

用命名参数的字典形式,虽然Pandas类型标注写的是dict[str, str],但实际驱动(比如SQLAlchemy或pyodbc)会自动处理类型转换,SQL Server能正确识别INT类型:

params = {
    "is_simple": is_simple,
    "lookback": lookback
}
# SQL脚本要对应使用命名占位符,比如:WHERE is_simple = :is_simple AND lookback = :lookback
pandas.read_sql_query(sql=file.read(), con=connection, params=params)

这种方式不仅更易维护,类型提示的冲突也会更小。

3. 手动转换参数类型

把bool转成int(SQL Server用0/1表示布尔值),直接传int类型参数:

params = [int(is_simple), lookback]
pandas.read_sql_query(sql=file.read(), con=connection, params=params)

这样参数列表类型是list[int],虽然和Pandas标注的list[str]仍有差异,但实际运行完全正常,类型检查工具也会更友好。

4. 修正Pandas类型定义(长期方案)

Pandas 1.5.1的这个类型定义其实不准确,params实际支持多种数据类型(只要驱动能处理)。可以去Pandas的GitHub仓库提交Issue或PR,把read_sql_query的params类型注解改成list[Any] | dict[str, Any] | None,后续版本就能解决这个提示问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:41:31