如何在类中查询在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(...)