Skip to main content
 首页 » 编程设计

python之从选择结果创建表失败,错误 292 "wrong number of arguments: "

2025年05月04日10kevingrace

使用官方的、半不受支持的 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 

更新:我也通过 pyodbc 使用官方支持的 ODBC 驱动程序对此进行了测试,并且出现了一个非常相似的问题:

>>> 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 查询不能使用占位符。任何帮助解决这个问题的帮助将不胜感激!

请您参考如下方法:

我对 Hana Studio 进行了同样的尝试。它也失败了。所以这不是特定于 Python 的。恕我直言,如果您在 SAP community network 中提出这个问题,您将有更好的机会获得答案。因为这里有专家。