バインドされたパラメータを使用して、データベース内で「テーブルの作成」ステートメントを実行したいと思います。これは機能します(バインドされたパラメーターなしで):
from sqlalchemy.sql import text
from sqlalchemy import create_engine
con = create_engine(\\..)
s = text("""create table test_table as select * from dual where 1 = 1 """)
con.execute(s)
ただし、バインドされたパラメーターを使用する場合:
s = text("""create table test_table as select * from dual where 1 = :a """)
con.execute(s, a = 1)
エラーで失敗しますDatabaseError: (cx_Oracle.DatabaseError) ORA-01036: illegal variable name/number
。
テーブルを作成しない単純なselectステートメントがスムーズに機能するため、このエラーがバインドされたパラメーターと関係があるとは確信していません。
s = text("""select * from dual where 1 = :a """)
con.execute(s, a = 1).fetchall()
#[('X',)]
「テーブルの作成」と「バインドされたパラメータ」にクエリを壊す何かがあるようです。なぜこれが起こっているのか、そしてそれを修正する方法はありますか?
バインド変数は、DDLステートメントでは許可されていません。これが、単純なクエリで期待どおりに機能する理由ですが、createtableステートメントを取得するとすぐに失敗します。残念ながら、バインド変数を使用せずにDDLステートメントを作成する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加