Как использовать отражение SQLAlchemy с Sybase? [ответ: оказывается, это не поддерживается!]

Я пытаюсь узнать больше о концепции .egg и методах переопределения в Python. Вот сообщение об ошибке, которое я получаю:

Traceback (most recent call last):
  File "C:/local/work/scripts/plmr/plmr_db.py", line 42, in <module>
    insp.reflecttable(reo_daily_table, column_list)
  File "build\bdist.win32\egg\sqlalchemy\engine\reflection.py", line 370, in reflecttable
  File "build\bdist.win32\egg\sqlalchemy\engine\reflection.py", line 223, in get_columns
  File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 260, in get_columns
NotImplementedError

Вот конкретная функция из base.py:

def get_columns(self, connection, table_name, schema=None, **kw):
    """Return information about columns in `table_name`.

    Given a :class:`.Connection`, a string
    `table_name`, and an optional string `schema`, return column
    information as a list of dictionaries with these keys:

    name
      the column's name

    type
      [sqlalchemy.types#TypeEngine]

    nullable
      boolean

    default
      the column's default value

    autoincrement
      boolean

    sequence
      a dictionary of the form
          {'name' : str, 'start' :int, 'increment': int}

    Additional column attributes may be present.
    """

    raise NotImplementedError()

Итак, мой вопрос: переопределить ли эту функцию, написав новый метод в моем основном модуле? Или я пропустил шаг где-то по пути с моим импортом? Или я тут совсем не в теме?

Любая помощь приветствуется :)

изменить: добавить мой код

import sys
from sqlalchemy import create_engine, select, Table, MetaData
from sqlalchemy.engine import reflection

dbPath = 'connection_string'
engine = create_engine(dbPath, echo=True)

connection = engine.connect()

#reflect tables into memory
meta = MetaData()
reo_daily_table = Table('reo_daily',meta)
insp = reflection.Inspector.from_engine(engine)
column_list=[...]
insp.reflecttable(reo_daily_table, column_list)

connection.close()

person ignorantslut    schedule 06.03.2012    source источник
comment
Мы действительно ничего не знаем о коде, который вы написали, поэтому мы не знаем, где вы ошиблись. Мы могли бы строить догадки, но пока мы не увидим часть кода (предпочтительно минимальный пример, достаточный для воссоздания ошибки), все, что мы можем сделать, это стрелять в темноте.   -  person SingleNegationElimination    schedule 06.03.2012
comment
добавил мой код, спасибо за предложение   -  person ignorantslut    schedule 06.03.2012
comment
Вопрос вообще неправильный; вам не нужно создавать подклассы или переопределять что-либо там. Вы просто неправильно используете SQLAlchemy.   -  person Antti Haapala    schedule 06.03.2012
comment
При отражении таблиц фактическое соединение с базой данных очень важно. 'connection_string' никак не может быть действительным. Кроме того, column_list=[...] не является допустимым python. Вы можете заменить часть имени пользователя:пароль@хост/db в URL-адресе подключения фиктивными, но нам действительно нужен ваш фактический код   -  person SingleNegationElimination    schedule 06.03.2012
comment
@TokenMacGuy мой dbPath действителен, я смог прекрасно подключиться к базе данных - не хотел публично публиковать имя сервера, имя пользователя, пароль и т. д. Что касается списка столбцов, он также заполнен действительным Python. e: вот формат строки подключения: 'sybase+pysybase://user:pass@server_dsn/tablename'   -  person ignorantslut    schedule 07.03.2012
comment
В любом случае, я могу следовать вашему коду, заполняя то, что считаю правильными утверждениями, но я не сталкиваюсь с ошибкой. Пожалуйста, опубликуйте достаточно подробностей, чтобы мы действительно поняли вашу ошибку; Я, конечно, не нашел способ.   -  person SingleNegationElimination    schedule 07.03.2012
comment
@TokenMacGuy Какие еще подробности я могу предоставить, чтобы уточнить? Внезапно я могу перечислить, что я подключаюсь к Sybase db с помощью плагина python-sybase с учетной записью/привилегиями администратора. e: использование версии 0.7 sqlalchemy   -  person ignorantslut    schedule 07.03.2012


Ответы (2)


ИЗМЕНИТЬ:

В настоящее время в диалекте Sybase отсутствует возможность отражать таблицы.

person SingleNegationElimination    schedule 06.03.2012
comment
вот оно, большое спасибо - избавил меня от потери еще 3 часов на это - person ignorantslut; 07.03.2012
comment
И все было легко решить, как только вы предоставили достаточно информации: D - person Antti Haapala; 07.03.2012

Вы совершенно неправильно поняли. Вам не нужно ничего подклассировать, и эта проблема вообще не имеет ничего общего с яйцами и файлами .ini.

Вы не должны создавать экземпляр Inspector таким образом. Если вы читали документацию по SQLAlchemy осторожно, вы заметите, что вы не должны использовать конструктор Reflection напрямую; вместо этого вы должны написать

insp = reflection.Inspector.from_engine(engine)
person Antti Haapala    schedule 06.03.2012
comment
Я обновил строку по вашему предложению; стоит отметить, что я следовал указанному примеру здесь (внизу этого раздела), когда я изначально писал свой код. Даже с предложенным вами изменением я все еще получаю ту же ошибку :( - person ignorantslut; 07.03.2012
comment
Однако ни один пример на этой странице не использовал Inspector(engine), а Inspector.from_engine(engine). Кстати, я предлагаю вам изменить заголовок вашего вопроса на Как использовать отражение SQLAlchemy с Sybase;) - person Antti Haapala; 07.03.2012