4

我有一个与 Item 类具有一对多关系的 User 类:

class User(Base):
    items=relationship(Item)
    def method(self):
        for item in self.items
            if self.items.itemname=='my item'
                #do something

现在我想在 User 类中的一个方法中访问 User 的一些项目(过滤)。编写在所有项目上运行的 for 循环(如示例中所示)或在类中运行查询是否更有效(性能方面)?(假设普通用户有几千个项目)。我也不知道如何在课堂上运行查询!有什么类似self.query.filter()的方法或者我应该在类中定义一个会话并运行session.query(Items).filter()

4

1 回答 1

8

如果您确定当前实例已附加到会话,则可以使用sqlalchemy.orm.session.object_session

所以它将是:

from sqlalchemy.orm.session import object_session

class User(Base):
    ...

    def method(self):
        session = object_session(self)
        session.query(Items).filter(...)

编辑

作为替代方案,我可以建议Dynamic Relationship Loaders。在这种情况下,您将关系作为可以进一步定义的查询:

class User(Base):
    items=relationship(Item, lazy='dynamic')

user1 = session.query(User).get(user_id)
user1.items.filter(...)
于 2013-01-15T14:49:54.013 回答