Informix + SQLAlchemy ищет таблицу, которая не существует - PullRequest
1 голос
/ 22 марта 2012

Я пытаюсь подключиться к базе данных Informix с помощью SQLAlchemy.Все мои тесты показывают, что соединение работает;однако всякий раз, когда я пытаюсь выполнить чтение базы данных, я получаю сообщение об ошибке:

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

1 Ответ

0 голосов
/ 23 марта 2012

Вы не определили, какую версию IBM Informix Dynamic Server (IDS) вы используете или на какой платформе вы используете, поэтому вам трудно помочь.

Похоже, что SQLAlchemy ожидает более свежую версию Informix, чем вы используете. К моему удивлению, в IDS 11.70 доступна функция niladic CURRENT_ROLE (проверена на 11.70.FC4 на RHEL 5 для x86 / 64). Он не был недавно добавлен, поэтому он будет в любой версии 11.70 и, возможно, в некоторых более ранних версиях (но не в той версии, которую вы используете).

Я не уверен, насколько большая ошибка в SQLAlchemy. Если версия Informix, которую вы используете, действительно старая, у них ограниченные достоинства, добавляющие ее поддержку. Вы можете узнать, какую версию вы используете, запустив:

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

Если это не сработает, ваш сервер устарел на много лет.


Добавление

Думая об этом немного больше ... Интересно, что SQLAlchemy собирается сделать с ролью. Вероятно, не стоит пытаться проанализировать, есть ли у вас разрешение; он должен попробовать операцию и справиться со сбоями. Это будет быстрее, особенно в общем случае, когда у вас действительно есть разрешение.

Возможны две проблемы:

  1. SQLAlchemy следует помнить, что некоторые (пока еще неопределенные) списки старых версий IDS не поддерживают CURRENT_ROLE.
  2. SQLAlchemy следует проанализировать, почему он должен знать о текущей роли.
...