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