'Return information about columns in `table_name`.
Given a string `table_name` and an optional string `schema`, return
column information as a list of dicts with these keys:
name
the column\'s name
type
:class:`~sqlalchemy.types.TypeEngine`
nullable
boolean
default
the column\'s default value
attrs
dict containing optional column attributes
:param table_name: string name of the table.  For special quoting,
use :class:`.quoted_name`.
:param schema: string schema name; if omitted, uses the default schema
of the database connection.  For special quoting,
use :class:`.quoted_name`.'

def get_columns(self, table_name, schema=None, **kw):

    col_defs = self.dialect.get_columns(self.bind, table_name, schema, info_cache=self.info_cache, **kw)
    for col_def in col_defs:
        coltype = col_def['type']
        if (not isinstance(coltype, TypeEngine)):
            col_def['type'] = coltype()
    return col_defs
