2012-02-07 54 views
0

我要讓這樣的查詢(我不知道它會怎樣看,即使在SQL,所以我可能是這是否甚至有可能完全關閉基地的):在SQLAlchemy中,如何在子關係上進行此條件查詢?

考慮:

class Parent(Base): 
    __tablename__ = 'parent' 
    __table_args__ = { 
     UniqueConstraint("name", "version") 
     } 

    name = Column(String, primary_key=True) 
    parent = Column(JSONEncodedDict) 
    tags = relationship(ParentTags) 
    version = Column(Integer) 

class ParentTags(Base):: 

    __tablename__ = 'parent_tags' 
    __table_args__ = { 
     UniqueConstraint("name", "tag"), 
     } 

    id = Column(Integer, Sequence("parent_tag_id_seq"), primary_key=True) 
    name = Column(String, ForeignKey("parent.name")) 
    tag = Column(String) 
    version = Column(Integer) 

我想這些查詢:

  1. 所有的父母由名爲版本;如果我要求命名版本爲「生產」,那麼只有版本位於tags =「Production」標籤表中的版本元組的版本元組。

  2. 所有父母按指定版本默認爲最新;如果我要求一個名爲「Production」的版本,那麼如果一個已命名的Parent有一個「Production」版本,則返回該版本;如果沒有,則返回最大版本。

  3. 如果不存在此類版本,則按版本返回最新的特定父代。

我正在使用SQLAlchemy 0.7.4,這讓我知道最新的。歡迎任何建議。

+0

如果你有具體這將是很好示例 - 數據庫中的數據以及查詢返回的數據。 – plaes 2012-02-07 06:51:56

回答

2

答1:

session.query(Parent.name, Parent.version).\ 
       join(ParentTag).\ 
       filter(ParentTag.tag=='Production').\ 
       all() 

我在說明2和3。請給有例如一些細節有點搞不清,如果第一ANS是爲你工作:)

相關問題