SqlAlchemy - Фильтрация по полю, определенному как ForeignKey

Я пытаюсь получить экземпляры класса, отфильтрованные по полю, которое является внешним ключом, но когда я пытаюсь это сделать, я всегда получаю все записи в базе данных, а не те, которые соответствуют критерию.

Допустим, у меня есть пара классов, использующих декларативную основу в простой связи N: 1. Я смоделировал это следующим образом:

#!/usr/bin/python2.6
class ContainerClass(declarativeBase):
     __tablename__ = "container_classes"
     _id = Column("id", Integer, primary_key=True)
     id = sqlalchemy.orm.synonym('_id', descriptor=property(getId, setId))


class WhateverClass(declarativeBase):
     __tablename__ = "whatever_classes"

     _id = Column("id", Integer, primary_key=True)
     _total = Column("total", Integer)
     _containerClassId = Column("container_class_id", Integer, ForeignKey("other_classes.id"))

     _containerClass = relationship("ContainerClass", uselist=False)

     id = sqlalchemy.orm.synonym('_id', descriptor=property(getId, setId))
     total = sqlalchemy.orm.synonym('_total', descriptor=property(getTotal, setTotal))
     containerClassId = sqlalchemy.orm.synonym('_containerClassId', decriptor=property(getContainerClassId, setContainerClassId))
     containerClass = sqlalchemy.orm.synonym('_containerClass', descriptor=property(getContainerClass setContainerClass))

Экземпляр «WhateverClass» может принадлежать одному экземпляру «ContainerClass» (и каждый ContainerClass может иметь несколько экземпляров WhateverClass). Отношения вроде бы налаживаются. Если я добавляю новый «WhateverClass» к «ContainerClass», то whatClass.containerClassId правильно получает значение класса ContainerClass, которому он принадлежит.

Но, допустим, мне нужно получить список экземпляров «WhateverClass», которые принадлежат "ContainerClass" чей id == 5.

Если я попытаюсь сделать:

from myClasses import WhateverClass
session.query(WhateverClass.WhateverClass).filter(WhateverClass.WhateverClass.containerClass.id == 5).all()

, я получу все экземпляры WhateverClass, которые хранятся в базе данных, а не только те, которые связаны с ContainerClass с id == 5

Но если я выполняю session.query (WhateverClass.WhateverClass) .filter (total <= 100) .all () , я правильно получаю экземпляры WhateverClass, чье «общее» поле <= 100.

I Я довольно новичок в sqlalchemy ... Мне нужно использовать объединенный запрос или что-то в этом роде? Я знаю, что это не может быть сложно, но мне не удалось найти подходящего решения. Я пробовал объединения, объединения ... Но (очевидно) я что-то делаю не так.

Я использую SqlAlchemy 0.6.6 и Python 2.6 (на всякий случай)

Заранее спасибо!

9
задан BorrajaX 13 February 2011 в 17:43
поделиться