我正在尝试使用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中的用户交谈后),我已经提交了错误报告:
答案 0 :(得分:0)
您尚未确定使用的是哪个版本的IBM Informix Dynamic Server(IDS),或者您正在使用哪个平台,因此很难为您提供帮助。
似乎SQLAlchemy需要比您使用的更新版本的Informix。令我惊讶的是,NILdic函数CURRENT_ROLE似乎在IDS 11.70中可用(在RHEL 5上针对x86 / 64在11.70.FC4上测试)。它最近没有添加,因此它将在任何11.70版本中,并且可能在某些早期版本中(但不早于您使用的版本)。
我不确定SQLAlchemy中有多少bug。如果你使用的Informix版本真的很旧,那么它们添加对它的支持是有限的。您可以通过运行找出您正在使用的版本:
SELECT DBINFO('version', 'full')
FROM 'informix'.systables
WHERE tabid = 1;
如果这不起作用,那么您的服务器已经过多年了。
再考虑一下......我想知道SQLAlchemy将如何处理这个角色。它可能不应该试图分析你是否有权限;它应该尝试操作并处理失败。这会更快,特别是在您确实拥有权限的常见情况下。
可能有两个问题: