Запрос к ассоциативной таблице через ORM сущность sqlalchemy

такая задача: есть ORM модели data_entry, labels, attributes_values. data_entry связана с остальными моделями N:N (т.е. через ассоциативные таблтицы).

data_entry ORM:

class DataEntryORM(Base):
    __tablename__ = 'data_entry'

    id = Column(Integer, primary_key=True, index=True)
    data_structure_id = Column(Integer, ForeignKey('data_structure.id', ondelete='CASCADE'))
    container_id = Column(Integer, ForeignKey('container.id', ondelete='CASCADE'))

    data_structure = relationship('DataStructureORM', backref=backref('data_entry_structure', cascade='delete'))
    container = relationship('ContainerORM', backref=backref('data_entry_container', cascade='delete'))
    labels = relationship('LabelORM', secondary=data_entry_label, back_populates='data_entries')
    data_tags = relationship('DataTagORM', secondary=data_entry_tag, back_populates='data_entries')
    attribute_values = relationship('AttributeValueORM', secondary=data_entry_attribute_value, back_populates='data_entries')

На примере data_entry_label, как мне быстро достать все идентификаторы label_id по data_entry_id по экземпляру класса DataEntryORM?

data_entry_label:

data_entry_label = Table('data_entry_label', Base.metadata,
                         Column('data_entry_id', Integer, ForeignKey('data_entry.id'), nullable=False),
                         Column('label_id', Integer, ForeignKey('label.id'), nullable=False))

Вопрос доп.: что содержит в себе значение DataEntryORM.labels если его достать в отдельную переменную?


Ответы (1 шт):

Автор решения: Andrew Holovko

На примере data_entry_label, как мне быстро достать все идентификаторы label_id по data_entry_id по экземпляру класса DataEntryORM?

>>> l = session.query(models.DataEntryORM).first()
>>> print(l.labels)
[<models.Label object at 0x1026898b0>, <models.Label object at 0x1026899a0>]

>>> print([i.id for i in labels])  # список id
[1, 2]

Вопрос доп.: что содержит в себе значение DataEntryORM.labels если его достать в отдельную переменную?

Ответ: Список объектов Label

→ Ссылка