公式の半サポートされていないhdbcli
Python モジュールを使用して SAP HANA に接続します。
いくつかのプレースホルダーを持つサブクエリからテーブルを作成しようとしています:
>>> cursor.execute('CREATE TABLE temporary_table AS (SELECT ? AS a FROM DUMMY) WITH DATA', [1])
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/some-masked-path-here/hdbcli/dbapi.py", line 369, in execute
ret = self.__execute(operation, tuple(parameters))
File "/some-masked-path-here/hdbcli/dbapi.py", line 244, in __execute
ret = self.__cursor.execute(operation, parameters=parameters, iscall=iscall)
Error: (292, 'wrong number of arguments: ')
(私の実際のケースでは、一時テーブルを作成しようとしていますが、これは結果を変えません)
クエリを の代わりにサブクエリからの単純な選択に変更すると、正常にCREATE TABLE
動作します。
>>> cursor.execute('SELECT * FROM (SELECT ? AS a FROM DUMMY) AS sub', [1])
True
SELECT
プレースホルダーを使用する代わりに定数を返すようにインナーを変更した場合にも機能します。
>>> cursor.execute('CREATE TABLE temporary_table AS (SELECT 1 AS a FROM DUMMY) WITH DATA', [])
True
更新:公式にサポートされている ODBC ドライバーでもこれをテストしましたがpyodbc
、非常によく似た問題が発生します。
>>> cursor.execute('CREATE TABLE temporary_table AS (SELECT ? AS a FROM DUMMY) WITH DATA', [1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pyodbc.ProgrammingError: ('The SQL contains 0 parameter markers, but 1 parameters were supplied', 'HY000')
単純な副選択は ODBC 経由でも機能しますが、次のようにします。
>>> cursor.execute('SELECT * FROM (SELECT ? AS a FROM DUMMY) AS sub', [1])
<pyodbc.Cursor object at 0xb70f0b80>
私はここで途方に暮れています。考えられることはすべて試しましたが、CREATE TABLE
クエリでプレースホルダーを使用できない理由がわかりません。この混乱を理解するための助けをいただければ幸いです。