0

複数ステートメントのクエリである 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 in execute(self, command, params, timeout, >_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 params, processing_params) 510 if len(processed_pa​​rams) > 0: --> 511 query = command %processed_pa​​rams 512 else: 513 query = command

KeyError: 'data_date'

4

1 に答える 1

0

おそらく、あなたはこのようなことを試すことができますか?そうでない場合は、ドキュメントを掘り下げてください。

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-02-22T04:39:20.783 に答える