gpt4 book ai didi

flask-sqlalchemy - 在不同情况下改变懒惰

转载 作者:行者123 更新时间:2023-12-03 23:54:04 28 4
gpt4 key购买 nike

以文档中的例子为例

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'))

我们只能设置 懒惰 的参数关系当我们构建 型号 .但是我发现没有文档显示实例化后如何更改它。

在我的大多数情况下
user = User.query.first()
addresses = user.addresses.filter(is_del=0).all()

这是一对多或
wallet = user.wallet

这是一对一模型,我只是设置了 懒惰动态或选择 让模型只获取我需要的数据。

但是最近我想使用管理前端页面导出数据库中的数据。
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 作为 懒惰 .这将非常缓慢,因为每次使用子查询时,父查询都会访问数据库。

我测试了 之间的速度选择 加入 使用单个字段,如 "Full Name": x.base.full_name导出所有用户数据。 选择 得到 53 秒和 加入 有 0.02 秒。

有没有办法改变 懒惰参数基于不改变原始模型?

最佳答案

根据documentation您可以使用 options定义您想要的加载类型。我相信它会覆盖您在关系中定义的默认值

有用的链接

Joined Loads

Select Loads

Lazy Load

关于flask-sqlalchemy - 在不同情况下改变懒惰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249870/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com