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

使用Pandas执行SQL查询报错,相同逻辑用Cursor可正常运行

Pandas read_sql 字符串参数查询报错解决办法

问题场景

使用Pandas的read_sql查询字符串类型参数时触发错误,但用原生Cursor执行相同逻辑正常,查询数值类型参数也无问题。

错误代码:

import pandas as pd
data_BG2= pd.read_sql("SELECT * FROM [dbo].[Bullgear geometry] WHERE [Bullgear]=?", "3810907-01110", cnxn)

(注:cnxn为已建立的数据库连接对象)

报错信息:

ArgumentError: Could not parse rfc1738 URL from string '3810907-01110'

对比正常运行的Cursor代码:

cursor=cnxn.cursor()
cursor.execute("SELECT * FROM [dbo].[Bullgear geometry] WHERE [Bullgear]=?","3810907-01110")

for i in cursor:
    print (i)

错误原因

read_sql的参数顺序与cursor.execute不同:read_sql的第二个参数要求传入数据库连接对象,你误将查询参数"3810907-01110"放在了这个位置,导致Pandas把它当成数据库连接URL解析,从而抛出错误。

解决办法

调整参数顺序,将数据库连接cnxn作为第二个参数传入,同时把查询参数放到params参数中(需以列表/元组形式传入):

方法一(指定参数名):

import pandas as pd
data_BG2 = pd.read_sql(
    sql="SELECT * FROM [dbo].[Bullgear geometry] WHERE [Bullgear]=?",
    con=cnxn,
    params=["3810907-01110"]
)

方法二(按位置传参):

import pandas as pd
data_BG2 = pd.read_sql(
    "SELECT * FROM [dbo].[Bullgear geometry] WHERE [Bullgear]=?",
    cnxn,
    params=["3810907-01110"]
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:40:41