2

我正在尝试使用 IBM DB2 数据服务器驱动程序 (ODBC)(v10.1) 和 ibm_db ( https://code.google.com/p/ibm从 django(v1.3.1) 连接到 IDS(v11.50) -db/)。从 django 到驱动程序的简单查询,例如“从 adm_audit 中选择不同的 adm_audit.action”,select distinct "adm_audit"."action" from "adm_audit"并生成错误:

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

我尝试在 db2cli 中执行相同的 sql 语句,它返回相同的错误:

    >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 )"

(并从字符串类导入'lower')

4

2 回答 2

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:查询有效
于 2013-03-04T13:35:21.880 回答
0

我为 Informix 摆弄了一下 ibm_db_django。

结果可以在这里找到:https ://github.com/nutztherookie/ibm_db_django

它并不完美,但它确实支持inspectdb,例如:)

于 2014-07-02T12:34:25.660 回答