【问题标题】:sqlalchemy multiple statements with multiple parameters to passsqlalchemy 多个带有多个参数的语句要传递
【发布时间】:2021-02-20 06:05:47
【问题描述】:

当我没有将变量传递到我的 tape_query 字符串时,我通过 sqlalchemy 创建了一个有效的连接,这是一个多语句查询。但是,当我尝试通过 :sp 将 sp_input 传递到下面的字符串中时,我得到下面的 KeyError: 'data_date' 错误。我错过了什么?

什么有效:

"""
USE DATABASE this;
USE SCHEMA that;
SELECT * from table where id=100;
"""

conn = engine.connect()
for q in tape_query.split(";"):
    conn.execute(q)

什么不起作用:

tape_query=
"""
USE DATABASE this;
USE SCHEMA that;
SELECT * from table where id=:sp;
"""

sp_input=200

conn = engine.connect()
for q in tape_query.split(";"):
    conn.execute(q, {"sp":sp_input})

错误如下所示:

~\anaconda3\lib\site-packages\snowflake\connector\cursor.py 在执行(自我、命令、参数、超时、>_exec_async、_do_reset、_put_callback、_put_azure_callback、_put_callback_output_stream、_get_callback、>_get_azure_callback、_get_callback_output_stream、_show_progress_bar ,_statement_params,_is_internal,>_no_results,_use_ijson,_is_put_get,_raise_put_get_error,_force_put_overwrite) 509 参数,已处理参数) 510 如果 len(processed_pa​​rams) > 0: --> 511 查询 = 命令 % 已处理参数 512 其他: 513查询=命令

KeyError: 'data_date'

【问题讨论】:

  • text()包裹q

标签: python sqlalchemy parameter-passing multiple-select-query


【解决方案1】:

也许你可以尝试这样的事情?如果没有,那么也许可以深入研究文档。

https://docs.sqlalchemy.org/en/13/core/engines.html

https://docs.sqlalchemy.org/en/13/core/connections.html

from sqlalchemy import create_engine

engine = create_engine('postgresql://scott:tiger@localhost:5432/mydatabase')

sp_input = [100, 200]
query_string = f"select * from table1 where id={sp_input[0]}; select * from table2 where id={sp_input[1]}"

connection = engine.raw_connection()
try:
    cursor = connection.cursor()
    cursor.execute(query_string)
    results_one = cursor.fetchall()
    cursor.nextset()
    results_two = cursor.fetchall()
    cursor.close()
finally:
    connection.close()

【讨论】:

    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    相关资源
    最近更新 更多