【问题标题】:Informix + SQLAlchemy looking for table that doesn't existInformix + SQLAlchemy 寻找不存在的表
【发布时间】:2012-03-22 09:46:02
【问题描述】:

我正在尝试使用 SQLAlchemy 连接到 Informix 数据库。我所有的测试似乎都表明连接正常;但是,每当我尝试读取数据库时,都会出现错误:

DatabaseError: (DatabaseError) SQLCODE -217 in PREPARE: 
IX000: Column (current_role) not found in any table in the query (or SLV is undefined).
 'select CURRENT_ROLE from systables' ()

现在我要连接的数据库没有 CURRENT_ROLE,我该如何解决这个问题?

我对错误的交互式追溯如下所示:

https://gist.github.com/2157378

违规行是:

 File "build/bdist.linux-i686/egg/sqlalchemy/dialects/informix/base.py", line 593, in _get_default_schema_name
    return connection.execute('select CURRENT_ROLE from systables').scalar()

这个问题有解决办法吗?

我现在被引导相信这是 SQLAlchemy 中的一个错误(在与#sqlalchemy 中的用户交谈之后)并且我已经提交了一个错误报告:

http://www.sqlalchemy.org/trac/ticket/2448

【问题讨论】:

    标签: sqlalchemy db2 informix


    【解决方案1】:

    您尚未确定您正在使用哪个版本的 IBM Informix Dynamic Server (IDS) 或在哪个平台上使用它,因此很难为您提供帮助。

    SQLAlchemy 似乎需要比您使用的更新版本的 Informix。令我惊讶的是,niladic 函数 CURRENT_ROLE 似乎在 IDS 11.70 中可用(在 RHEL 5 上的 11.70.FC4 上测试 x86/64)。它不是最近添加的,因此它将在任何 11.70 版本中,并且可能在一些更早的版本中(但不早于您使用的版本)。

    我不确定 SQLAlchemy 中有多少错误。如果您使用的 Informix 版本真的很旧,那么他们添加对它的支持是有限的。你可以通过运行找到你正在使用的版本:

    SELECT DBINFO('version', 'full')
      FROM 'informix'.systables
     WHERE tabid = 1;
    

    如果这不起作用,那么您的服务器已经过时多年了。


    附录

    再想一想...我想知道 SQLAlchemy 将如何处理这个角色。它可能不应该试图分析你是否有权限;它应该尝试操作并处理失败。这会更快,尤其是在您确实拥有权限的常见情况下。

    可能有两个问题:

    1. SQLAlchemy 应该知道旧版本 IDS 的某些(尚未确定的)列表不支持 CURRENT_ROLE。
    2. SQLAlchemy 应审查为什么需要了解当前角色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      相关资源
      最近更新 更多