如何在类中查询在SQLAlchemy的

问题描述:

我有一个一对多的关系,Item类用户等级:如何在类中查询在SQLAlchemy的

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

现在我想要得到的一些项目的访问(过滤)用户在User类中的一个方法中。编写运行在所有项目上的for-loop(如示例中所示)或在类中运行查询是否更有效(性能明智)? (比方说,对于普通用户来说有成千上万的项目)。我也不知道如何在一个类中运行查询!有没有类似self.query.filter()的方法,或者我应该在课堂上定义一个会话并运行session.query(Items).filter()

如果您确信当前实例连接到一个会话,你可以用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(...)