2013-03-04 2 views
2

Я пытаюсь подключиться к IDS (v11.50) из django (v1.3.1) с помощью IBM DB2 Data Server Driver (ODBC) (v10.1) и ibm_db (v10.1) https://code.google.com/p/ibm-db/). Простой запрос типа «выберите отчетливый adm_audit.action из adm_audit» от Джанго до передачи водителя в select distinct "adm_audit"."action" from "adm_audit" и генерировать ошибку:Django, Informix, ibm_db и драйвер сервера данных DB2

[IBM][CLI Driver][IDS/UNIX64] A syntax error has occurred. 

Я попытался выполнить ту же инструкцию SQL в db2cli, и она возвращает ту же ошибку:

>select distinct "adm_audit"."action" from "adm_audit" 
    select distinct "adm_audit"."action" from "adm_audit" 
    SQLError: rc = 0 (SQL_SUCCESS) 
    SQLGetDiagRec: SQLState  : 42000 
       fNativeError : -201 
       szErrorMsg : [IBM][CLI Driver][IDS/UNIX64] A syntax error has occurred. 
       cbErrorMsg : 58 

если котировки будут удалены, оператор завершается успешно:

> select distinct adm_audit.action from adm_audit 
    select distinct adm_audit.action from adm_audit 
    FetchAll: Columns: 1 
     action 
     ...results... 
    FetchAll: 13 rows fetched. 

Ана предложение? Оцените любую помощь.

Проблема решена.

1) DELIMIDENT переменная

2) переход от ibm_db_django -> operation.py около 176 линии, струнный

"name = upper(name)"

к

"name = lower(name)"

(и импорт ` нижний 'от класса струн)

+0

вы в состоянии выполнить такой запрос от Informix инструментов, таких как 'dbaccess'? –

+0

Тот же результат. '201: произошла синтаксическая ошибка.' После 'select different" adm_audit "." Action "from" adm_audit "'. Кажется, это проблема с ibm_db. – TheROX

+0

По умолчанию Informix распознает как '' ', так и' '' кавычки вокруг строк (они должны быть одинаковыми на обоих концах, конечно). Чтобы распознать строку с двойными кавычками в качестве идентификатора с разделителями, вам нужно заставить свою руку с переменной среды DELIMIDENT или эквивалентной настройкой в ​​строке подключения API. Этот параметр не может быть изменен после выполнения сеанса. –

ответ

1

Существует переменная окружения DELIMIDENT, которая может управлять использованием двойных кавычек. Установите его в y, чтобы использовать его только для разграниченных идентификаторов SQL.

Подробнее: http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls1077.htm

Я тестировал его с ODBC и JDBC, и это работает так же, для SELECT * FROM "aaa":

  • без DELIMIDENT набор, с невыполнением DELIMIDENT=n: ошибка
  • с DELIMIDENT=y комплекте: запросы работы
+0

Большое вам спасибо, но это только половина проблемы. Теперь я выясню, что Informix до v11.70xC2 не поддерживает базы данных, не учитывающие регистр, поэтому в верхнем регистре отображается ошибка для строк имен таблиц (в кавычках). – TheROX