Как переопределить использование схемы на ibm_db.exec_immediate (connect, sql) в Python - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь запустить прогон select count(*) from 'ActualSchemaUser.TABLE_NAME' where 'DATE_CREATE' >= 2019-10-17 и получаю следующую ошибку:

** Исключение: [IBM] [Драйвер CLI] [DB2 / LINUXZ64] SQL0204N "DatabaseUSer.ActualSchemaUser.TABLE_NAME"это неопределенное имя. SQLSTATE = 42704 SQLCODE = -204 **

Похоже, ibm_db.exec_immediate(connect, sql) добавляет пользователя базы данных, соединяющего пользователя с запросом с точки зрения модуля ibm_db.

Есть ли способ предотвратить установку или переопределениесхема для функции ibm_db.exec_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)

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Не уверен, что это проблема с Python, но неверные кавычки вокруг Идентификаторы SQL . Вам нужно использовать

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

Для идентификаторов SQL должны быть двойные кавычки, для строковых значений одинарные кавычки. Имя, состоящее из двух частей, состоит из схемы, имени таблицы и обоих отдельных идентификаторов.

1 голос
/ 18 октября 2019

Вам нужно отдельно указать схему и имя таблицы:

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

(конечно, я не знаю таблицу)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...