min*_*sky 5 python sqlalchemy pyramid
我正在使用 Pyramid + SQLAlchemy 并进行以下设置
from sqlalchemy import orm
from __init__ import user_table
from device import Device
class User(object):
def __repr__(self):
return 'User: ' + self.username
orm.mapper(User, user_table, properties={
'devices': orm.relation(Device, backref='owner')
})
Run Code Online (Sandbox Code Playgroud)
如何在访问时添加过滤器user.devices?当我尝试时user.devices.filter(Device.platform==1).all(),出现以下错误:
'InstrumentedList' object has no attribute 'filter'
Run Code Online (Sandbox Code Playgroud)
您可以使用启用查询的属性:
class User(object):
def __repr__(self):
return 'User: ' + self.username
# property
@property
def devices_filtered(self):
return object_session(self).query(Device).with_parent(self).filter(Device.platform==1).all()
# or simply a method
def devices_filtered(self, platform):
return object_session(self).query(Device).with_parent(self).filter(Device.platform==platform).all()
Run Code Online (Sandbox Code Playgroud)
或者查看动态关系加载器:
orm.mapper(User, user_table, properties={
'devices': orm.relation(Device, backref='owner', lazy='dynamic')
})
# ...
user = session.query(User).get(_some_user_id)
devices = user.devices.filter(Device.platform==platform).all()
Run Code Online (Sandbox Code Playgroud)
只需阅读参考文档即可获取有关主题的完整说明。
| 归档时间: |
|
| 查看次数: |
6046 次 |
| 最近记录: |