【问题标题】:How can I resolve this SQLAlchemy error regarding SQL parameters?如何解决有关 SQL 参数的 SQLAlchemy 错误?
【发布时间】:2021-12-26 09:03:24
【问题描述】:

我通过 Python 的 SQLAlchemy 库将一个非常简单的 SQL 查询传递给服务器。这是我的代码:

def query4():
    ed_notes = sa.Table("ED_NOTES_MASTER",metadata,autoload=True,autoload_with=engine)
    note_query = sa.select([ed_notes.columns["PT_FIN"],
        ed_notes.columns["RESULT_TITLE_TEXT"],
        ed_notes.columns["RESULT"],
        ed_notes.columns["RESULT_DT_TM"]]).where(ed_notes.columns["PT_FIN"].in_(unique_fins)).where(start_time<ed_notes.columns["RESULT_DT_TM"]).where(end_time>ed_notes.columns["RESULT_DT_TM"])
    result = connection.execute(note_query)
    resultset = result.all()
    note_data_prelim = pd.DataFrame(resultset)
    return note_data_prelim

变量“unique_fins”是我试图专门查询的超过 50,000 个唯一标识符的列表。运行此查询时,会出现以下错误:

sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('The SQL contains -11872 parameter markers, but 53664 parameters were supplied', 'HY000')

对正在发生的事情有任何想法吗?问题肯定出现在查询的 ed_notes.columns["PT_FIN"].in_(unique_fins) 部分。

提前致谢!

【问题讨论】:

  • 向我们展示问题 SQL 也
  • 同意.. print(str(note_query))
  • 底层数据库又是什么?可能你已经达到了参数限制。

标签: python sql sqlalchemy odbc pyodbc


【解决方案1】:

in_ 运算符会将您的unique_fins 列表转换为每个项目的单个参数。您可能会达到基础数据库的参数限制。

参考这个答案here你可以做这样的事情;

.where(ed_notes.columns["PT_FIN"] == func.any_(unique_fins))

【讨论】:

    猜你喜欢
    • 2021-04-21
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多