Как узнать свойства таблицы из сопоставленного объекта SQLAlchemy

У меня есть класс, сопоставленный с таблицей, в моем случае декларативным способом, и я хочу "обнаружить" свойства таблицы, столбцы, имена, отношения из этого класса:

engine = create_engine('sqlite:///' + databasePath, echo=True)

# setting up root class for declarative declaration
Base = declarative_base(bind=engine)

class Ship(Base):
    __tablename__ = 'ships'

    id = Column(Integer, primary_key=True)
    name = Column(String(255))

    def __init__(self, name):
            self.name = name

    def __repr__(self):
            return "<Ship('%s')>" % (self.name)

Итак, теперь моя цель из класса "Ship" получить столбцы таблицы и их свойства из другого фрагмента кода. Я думаю, я могу справиться с этим, используя инструментарий, но есть ли способ, предоставляемый API-интерфейсом SQLAlchemy?

1 ответ

Решение

Необходимую информацию вы можете получить из объекта Table:

  • Ship.__table__.columns предоставит вам информацию о столбцах
  • Ship.__table__.foreign_keys перечислит внешние ключи
  • Ship.__table__.constraints, Ship.__table__.indexes другие свойства, которые вы можете найти полезными

Если декларативная база не используется, ответ не будет. Следующее должно работать независимо от того, как оно инициализировано

Для объекта класса:

TableClass.sa_class_manager.mapper.mapped_table.name

Для экземпляра объекта:

tableObj.sa_instance_state.mapper.mapped_table.name
Другие вопросы по тегам