Как узнать свойства таблицы из сопоставленного объекта 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