2012-09-11 38 views
1

所以我真的不知道如何命名我的問題,所以這是我的最佳拍攝。現在,我的情況是我有幾個表:Sqlalchemy「雙層」查詢

Post 
--------- 
Id 
#.... 

Alert 
------------- 
Id 
like_id 
Seen 

Like 
-------- 
id 
post_id 

而現在,我需要設置請求處理,我有帖子的ID,但我需要找出是另一個警報是否對應到同一職位已經啓動。所以基本上,它是一個「雙層」查詢,在這裏我必須找到與相應的帖子相對應的警報。我怎麼能用sqlalchemy來做到這一點?

回答

3

例如:

class Post(Base): 
    __tablename__ = 'post' 

    id = Column(Integer, primary_key=True) 
    text = Column(Unicode) 

class Like(Base): 
    __tablename__ = 'like' 

    id = Column(Integer, primary_key=True) 
    post_id = Column(Integer, ForeignKey(Post.id), nullable=False) 

class Alert(Base): 
    __tablename__ = 'alert' 

    id = Column(Integer, primary_key=True) 
    like_id = Column(Integer, ForeignKey(Like.id)) 

然後在SQLAlchemy中,你可以使用下面的查詢:

DBSession.query(Alert.id).join(Like).join(Post).filter(Post.id==2).all()