У меня есть простое отношение «один ко многим», сопоставленное с SqlAlchemy:
Base = declarative_base()
class Type(Base):
__tablename__ = "entity_types"
type = Column(String(100), primary_key=True)
description = Column(String(300))
class Entity(Base):
__tablename__ = "entities"
id = Column(Integer, primary_key=True)
type_id = Column('type', String(100), ForeignKey(Types.type),
nullable=False)
type = relation(Type, backref='entities')
value = Column(Text, nullable=False)
Я хочу запросить все типы, когда-либо использованные в сущности.В чистом SQL я бы сделал это следующим образом:
SELECT entity_types.*
FROM entities
JOIN entity_types ON entities.type == entity_types.type
GROUP BY entity_types.type
Как мне решить эту проблему с помощью ORM-движка SqlAlchemy?
Я пробовал эти запросы, но все они не возвращаютЯ хочу:
session.query(Action.type).group_by(Action.type).all()
session.query(Type).select_from(Action).group_by(Type).all()
Я также пытался использовать options(joinedload('type'))
, но я обнаружил, что это используется только для принудительной загрузки и обхода отложенной загрузки.
ДОПОЛНЕНИЕ: Я только что добавил backref
в relation
из Entity
.Я думаю, что проблему можно решить с помощью запроса count(Type.entities) > 0
, но я не могу понять, как точно сформировать правильный запрос ORM.