В SQLAlchemy, как я могу сделать этот условный запрос для дочерних отношений? - PullRequest
0 голосов
/ 07 февраля 2012

Я хочу сделать запрос, подобный этому (я не уверен, как он будет выглядеть даже в 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. Определенный родительский элемент по версии возвращается к последней версии, если такой версии не существует.

Я использую SQLAlchemy 0.7.4, который дает мне самое новое, насколько я знаю. Любые предложения приветствуются.

1 Ответ

2 голосов
/ 07 февраля 2012

Ответ 1:

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

Я немного запутался в описании 2 и 3. Пожалуйста, приведите некоторые подробности с примером, если первый ответ работает для вас:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...