2010-11-01 60 views
0

我有SQLAlchemy的映射一個簡單的一對多關係: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 

如何使用SqlAlchemy的ORM引擎解決此問題?

我已經試過這些疑問,但他們都沒有回我想要什麼:

session.query(Action.type).group_by(Action.type).all() 

session.query(Type).select_from(Action).group_by(Type).all() 

我也嘗試使用options(joinedload('type')),但是我發現,這只是用於強制立即加載並繞過延遲加載。

此外:我剛剛在Entityrelation加入backref。我認爲通過查詢count(Type.entities) > 0可以解決問題,但我無法弄清楚如何完全形成有效的ORM查詢。

回答

1

我只是想通了:

session.query(ActionType).filter(ActionType.actions.any()).all() 

any()的伎倆。