Я пытаюсь получить экземпляры класса, отфильтрованные по полю, являющемуся внешним ключом, но когда я пытаюсь это сделать, я всегда получаю все записи в базе данных, а не те, которые соответствуют критерию.
Допустим, у меня есть пара классов, использующих декларативную базу в простых отношениях 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))
Экземпляр «WhwhatClass» может принадлежать одному экземпляру «ContainerClass» (а каждый «ContainerClass» может иметь несколько экземпляров «WheverClass»). Отношения, кажется, работают нормально. Если я добавлю новый «WhwhatClass» в «ContainerClass», whatClass.containerClassId правильно получит значение класса ContainerClass, к которому он принадлежит.
Но, скажем, мне нужно получить список экземпляров «WheverClass», которые принадлежат «ContainerClass», чей id == 5.
Если я попытаюсь сделать:
from myClasses import WhateverClass
session.query(WhateverClass.WhateverClass).filter(WhateverClass.WhateverClass.containerClass.id == 5).all()
Я получаю все экземпляры WhwhatClass, которые хранятся в базе данных, а не только те, которые связаны с ContainerClass с id == 5
Но если я сделаю session.query (WhwhatClass.WhwhatClass) .filter (total <= 100) .all () </em> Я правильно получу экземпляры WheverClass, чье «общее» поле <= 100. </p>
Я довольно новичок в sqlalchemy ... Должен ли я использовать объединенный запрос или что-то в этом роде? Я знаю, что это не может быть сложно, но я не смог найти подходящего решения. Я пробовал объединения, союзы ... Но (очевидно) я делаю что-то не так.
Я использую SqlAlchemy 0.6.6 и Python 2.6 (на всякий случай, если это актуально)
Заранее спасибо!