pyodbc - 传递参数

Posted

技术标签:

【中文标题】pyodbc - 传递参数【英文标题】:pyodbc - Passing parameters 【发布时间】:2020-03-06 10:52:06 【问题描述】:

好的,我尝试了 SO 中所有可能的情况,但都没有成功。

我在调用需要传递 4 个参数的已保存查询时遇到问题(谈论访问数据库),我有一个简单的代码:

params = ()
sql_saldo = "CALL KUP_BalansKupDosp(204701,0,#3/5/2020#,0)"
saldo = cursor.execute(sql_saldo)
for row in saldo.fetchall():
    print(row)

这行得通!

但是由于我需要这些参数是动态的,所以当我尝试时:

params = ('204701','0,#3/5/2020#','0')
sql_saldo = "CALL KUP_BalansKupDosp(?,?,?,?)"
saldo = cursor.execute(sql_saldo, params)
for row in saldo.fetchall():
    print(row)

我收到一个错误Data type mismatch in criteria expression

这是原始参数定义 PARAMETERS InKupID Long, InSekID Long, InDatum DateTime, InToler Currency = 1; 所以我想它需要字符串、字符串、日期时间和 int。 所以当我尝试:

today_row = date.today()
today = today_row.strftime("%d/%m/%Y")
params = (204701,0,today,0)
sql_saldo = "CALL KUP_BalansKupDosp(?,?,?,?)"
saldo = cursor.execute(sql_saldo, params)
for row in saldo.fetchall():
    print(row)

我也遇到了同样的错误,我什至尝试了所有可能的组合,但我就是想不通。

PS。我的连接很好,因为除了这个之外我还有 10 个查询。

有人遇到过类似的问题吗?

【问题讨论】:

【参考方案1】:

我设法用这个来解决它:

params = (204701, 0, today, 0)
sql_saldo = "CALL KUP_BalansKupDosp(%s,%s,%s,%s)" % params
saldo = cursor.execute(sql_saldo)
for row in saldo.fetchall():
    print(row)

【讨论】:

以上是关于pyodbc - 传递参数的主要内容,如果未能解决你的问题,请参考以下文章

连接字符串中的 PYODBC 传递变量

未处理来自 pyodbc 查询的最后一条记录(到使用 stomp 的消息传递系统)

pyodbc/sqlalchemy - 使用 pd.read_sql_query 读取表中的每一列。通过查询传递变量

PYODBC 到 Pandas - DataFrame 不起作用 - 传递值的形状是(x,y),索引暗示(w,z)

PYODBC到Pandas - DataFrame不工作 - 传递值的形状是(x,y),索引暗示(w,z)

向过程传递参数有啥传递和啥传递两种方法,其中啥是VB默认的参数传递方式?