Search code examples
pythonsqlalchemyoverridingegg

How to use SQLAlchemy reflection with Sybase? [answer: turns out it's not supported!]


I'm trying to learn more about the .egg concept and overriding methods in Python. Here's the error message I'm receiving:

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

Here's the specific function from 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()

So my question is - do I override this function by writing a new method in my main module? Or am I missing a step somewhere along the way with my imports? Or am I just completely off track here?

Any and all help is appreciated :)

edit: adding my code

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()

Solution

  • EDIT:

    The Sybase dialect currently lacks the ability to reflect tables.