Django,Informix,ibm_db和DB2数据服务器驱动程序

时间:2013-03-04 12:26:19

标签: django db2 informix

我正在尝试使用IBM DB2数据服务器驱动程序(ODBC)(v10.1)和ibm_db(https://code.google.com/p/ibm-db/)从django(v1.3.1)连接到IDS(v11.50)。从django到驱动程序的'select distinct adm_audit.action from adm_audit'之类的简单查询转移到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.
Anu建议? 感谢任何帮助。

问题解决了。

1)DELIMIDENT变量

2)从ibm_db_django改变 - > operation.py在176行左右,字符串

"name = upper( name )"

"name = lower( name )"

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

2 个答案:

答案 0 :(得分: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设置:查询有效

答案 1 :(得分:0)

我为Informix稍微摆弄了ibm_db_django。

可以在此处找到结果:https://github.com/nutztherookie/ibm_db_django

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