在SQLAlchemy中,如何在子关系上进行此条件查询?

时间:2012-02-07 05:50:41

标签: python sqlalchemy

我想做一个像这样的查询(我不确定它在SQL中看起来如何,所以我可能完全不依赖于这是否可能):

假设:

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. 所有父母按指定版本;如果我要求命名版本“生产”,那么只有父名称,版本元组,其中版本在标签表中,标签=“生产”。

  2. 所有父母按指定版本默认为最新版本;如果我要求一个名为“Production”的版本,那么如果一个名为Parent的版本存在“Production”版本,则返回该版本;如果没有,请返回最高版本。

  3. 根据版本,如果不存在此类版本,则返回最新版本。

  4. 我正在使用SQLAlchemy 0.7.4,据我所知,它给了我最新版本。欢迎任何建议。

1 个答案:

答案 0 :(得分:2)

1:

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

我在描述2和3中有点困惑。如果第一个ans适合你,请举例说明:)