【问题标题】:Passing parameters to stored procedure using pandas.read_sql_query使用 pandas.read_sql_query 将参数传递给存储过程
【发布时间】:2021-03-11 15:46:21
【问题描述】:

使用read_sql_query时是否可以向存储过程传递多个参数?

这很好用:

df = pd.read_sql_query("EXEC x_tntLog_list_bySerialNo @SerialNo='B201209-058'", cnxn)

但是当我尝试用多个参数循环它时:

params = ["B201209-058", "B201209-059", "B201209-060"]
for param in params
    query = "EXEC x_tntLog_list_bySerialNo @SerialNo=?", param
    df = pd.read_sql_query(query, cnxn)
    results = results.append(df, ignore_index=True)
results

我得到这个错误:

Execution failed on sql '('EXEC x_tntLog_list_bySerialNo @SerialNo=?', ['B201209-060'])': The first argument to execute must be a string or unicode query.

我假设是因为 read_sql_query 正在为第一个参数寻找 cnxn 对象。

编辑

我意识到params 是一个字符串列表,但在我能够开始工作的此代码的先前版本中,这似乎不是问题:

params = ["B201209-058", "B201209-059", "B201209-060"]
for param in params:
     cursor.execute("EXEC x_tntLog_list_bySerialNo @SerialNo=?", param)
     for row in cursor.fetchall():
         sheet.append([value for value in row])
wb.save('Output.xlsx')

有些人可能想知道为什么我不使用这个代码,因为它可以工作,原因是我想使用 pandas 而不是 excel 来操作数据

【问题讨论】:

    标签: python sql pandas stored-procedures


    【解决方案1】:

    我觉得有点尴尬,但解决方法很简单:

    query = "EXEC x_tntLog_list_bySerialNo @SerialNo=" + "'" + param + "'"

    连接 SQL 字符串可以解决问题。

    obviously

    【讨论】:

      猜你喜欢
      • 2016-04-05
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多