J'ai une relation simple à un grand nombre mappée avec sqlalchemy:sqlalchemy Sélectionner le type de Relation
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)
Je veux interroger tous les types jamais utilisé dans une entité. Dans SQL pur j'accomplir ceci par:
SELECT entity_types.*
FROM entities
JOIN entity_types ON entities.type == entity_types.type
GROUP BY entity_types.type
Comment puis-je résoudre cela en utilisant ORM-Engine sqlalchemy?
J'ai essayé ces questions, mais ils ont tous ne reviennent pas ce que je veux:
session.query(Action.type).group_by(Action.type).all()
session.query(Type).select_from(Action).group_by(Type).all()
J'ai aussi essayé d'utiliser options(joinedload('type'))
, mais j'ai découvert, cela est uniquement utilisé pour forcer le chargement désireux et pour contourner le chargement paresseux.
AJOUT: Je viens d'ajouter le backref
dans le relation
de Entity
. Je pense que le problème est résolu en interrogeant count(Type.entities) > 0
, mais je ne peux pas comprendre comment former une requête ORM valide.