【发布时间】:2018-09-10 01:11:34
【问题描述】:
以文档为例
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
addresses = db.relationship('Address', lazy='dynamic',
backref=db.backref('person', lazy='select'))
我们只能在构建模型时将lazy参数设置为relationship。但是我发现没有文档显示实例化后如何更改它。
在我的大多数情况下,例如
user = User.query.first()
addresses = user.addresses.filter(is_del=0).all()
这是一对多或
wallet = user.wallet
这是一对一模型,我只是将 lazy 设置为 dynamic 或 select 让模型只获取我需要的数据。
但是最近我想使用管理前端页面导出数据库中的数据。
user_list = UserModel.query.all()
for x in user_list:
item = {
"ID": x.id if x.id else ''
}
if 'basic' in fields or is_all_field == 1:
ex_item = {
"Email": x.base.account,
"Full Name": x.base.full_name,
"Display Name": x.display_name if x.display_name else '',
"Phone Number": x.base.phone_number if x.base.phone_number else '',
"Status": status_map(x.is_sharer,x.is_block,x.status_id)
"Register Time": x.create_date.strftime('%Y-%m-%d %H:%M:%S') if x.create_date else ''
}
item = {**item, **ex_item}
if ......
........
如果我继续使用 select 和 dynamic 作为 lazy。这将非常非常慢,因为父查询每次使用子查询时都会访问数据库。
我使用"Full Name": x.base.full_name 之类的单个字段来测试select 和joined 之间的速度,以导出所有用户数据。 Select 得到 53s,joined 得到 0.02s。
有没有办法在不改变原有Model的基础上改变lazy参数?
【问题讨论】:
标签: flask sqlalchemy flask-sqlalchemy