如何在Python中覆盖ibm_db.exec_immediate(connect,sql)上的模式使用

如何在Python中覆盖ibm_db.exec_immediate(connect,sql)上的模式使用,python,db2,Python,Db2,我正在尝试从'ActualSchemaUser.TABLE_NAME'运行一次运行,其中'DATE_CREATE'>=2019-10-17,我得到以下错误: ** 异常:[IBM][CLI Driver][DB2/LINUXZ64]SQL0204N“DatabaseUSer.ActualSchemaUser.TABLE_NAME”是未定义的名称。SQLSTATE=42704 SQLCODE=-204 ** 它看起来像是ibm\u db.exec\u immediate(connect,sql)从

我正在尝试从'ActualSchemaUser.TABLE_NAME'运行一次运行,其中'DATE_CREATE'>=2019-10-17,我得到以下错误:

** 异常:[IBM][CLI Driver][DB2/LINUXZ64]SQL0204N“DatabaseUSer.ActualSchemaUser.TABLE_NAME”是未定义的名称。SQLSTATE=42704 SQLCODE=-204 **

它看起来像是
ibm\u db.exec\u immediate(connect,sql)
从ibm\u db模块的角度将数据库连接用户添加到查询中

是否有一种方法可以防止设置或覆盖ibm\u db.exec\u immediate()函数的架构

Python代码段:

import ibm_db
connect  = ibm_db.connect("DATABASE=DatabaseName;HOSTNAME=DatabaseHostname;PORT=DatabaseName;PROTOCOL=TCPIP;UID=DatabaseUSer; PWD=DataBasePassword;", "", "")

schemaName = 'ActualSchemaUser'
sql = "select count(*) from '{}.TABLE_NAME' where 'DATE_CREATE' >= 2019-10-17".format(schemaName)
statement = ibm_db.exec_immediate(connect, sql)
result = ibm_db.fetch_assoc(statement)

print(result)

不确定这是Python的问题,但引用错误。你需要使用

select count(*) from "ActualSchemaUser"."TABLE_NAME"
where 'DATE_CREATE' >= 2019-10-17

SQL标识符应该有双引号,字符串值应该有单引号。由两部分组成的名称由模式和表名以及两个单独的标识符组成。

不确定这是Python问题,但引用错误。你需要使用

select count(*) from "ActualSchemaUser"."TABLE_NAME"
where 'DATE_CREATE' >= 2019-10-17

SQL标识符应该有双引号,字符串值应该有单引号。两部分名称由架构和表名以及两个单独的标识符组成。

您需要分别引用架构和表名:

schemaName = 'ActualSchemaUser'
sql = "select count(*) from \"{}\".\"TABLE_NAME\" where DATE_CREATE >= 2019-10-17".format(schemaName)
# or sql = 'select count(*) from "{}"."TABLE_NAME" where DATE_CREATE >= 2019-10-17'.format(schemaName)
statement = ibm_db.exec_immediate(conn, sql)
result = ibm_db.fetch_assoc(statement)

Exception: [IBM][CLI Driver][DB2/LINUXX8664] SQL0204N  "ActualSchemaUser.TABLE_NAME" is an undefined name.  SQLSTATE=42704 SQLCODE=-204

(当然,我不知道表的名称)

您需要分别引用模式和表名:

schemaName = 'ActualSchemaUser'
sql = "select count(*) from \"{}\".\"TABLE_NAME\" where DATE_CREATE >= 2019-10-17".format(schemaName)
# or sql = 'select count(*) from "{}"."TABLE_NAME" where DATE_CREATE >= 2019-10-17'.format(schemaName)
statement = ibm_db.exec_immediate(conn, sql)
result = ibm_db.fetch_assoc(statement)

Exception: [IBM][CLI Driver][DB2/LINUXX8664] SQL0204N  "ActualSchemaUser.TABLE_NAME" is an undefined name.  SQLSTATE=42704 SQLCODE=-204

(当然我不知道表格的名称)

我刚刚意识到我没有像你在评论“ActualSchemaUser”时那样将模式和表格分开。“table_NAME”我刚刚意识到我没有像你在评论“ActualSchemaUser”时那样将模式和表格分开。“table_NAME”