我有一个与Item类具有一对多关系的User类:
class User(Base):
items=relationship(Item)
def method(self):
for item in self.items
if self.items.itemname=='my item'
#do something
Run Code Online (Sandbox Code Playgroud)
现在我想要在User类的方法中访问User的一些项目(已过滤).编写在所有项目上运行的for循环(如示例中所示)或在类中运行查询是否更有效(性能明智)?(假设一般用户有几千个项目).我也不知道如何在类中运行查询!有没有类似的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(...)
Run Code Online (Sandbox Code Playgroud)
编辑:
作为替代方案,我可以建议动态关系加载器.在这种情况下,您将获得关系作为查询,可以进一步定义:
class User(Base):
items=relationship(Item, lazy='dynamic')
user1 = session.query(User).get(user_id)
user1.items.filter(...)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2222 次 |
| 最近记录: |