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

标签 python hana

使用官方的、半不受支持的 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 中提出这个问题,您将有更好的机会获得答案。因为这里有专家。

关于python - 从选择结果创建表失败,错误 292 "wrong number of arguments: ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21436834/

相关文章:

Python PIL putdata() 方法未保存正确的数据

python - 如何通过保护只有经过身份验证的用户才能看到的 url 来使文件私有(private)

ODBC 中的 SQL 语句

python - 在 Django 1.6 中获取用户配置文件的新方法是什么?

python - 如何在按下某个键时显示图片?

database - 如何通过命令行或 GUI 重新创建(导出/导入)Hana DB 结构/数据?

R SAP Hana 与 Windows 的 ODBC 集成

java - hana DB 的连接字符串?

redis - SAP HANA 与 Memcached、Redis 和现有数据库之间有何区别以使用内存而非磁盘?

python - 条件 Python 正则表达式和命名组