
【非常重要】flask之sqlalchemy查询model和查询list的区别
在使用 Class 实例时,确保 init 方法中没有过度初始化,或根据业务逻辑决定何时使用该模式。 2.合理选择排序字段时,根据具体业务需要进行权衡。 使用 filter_by 时,谨慎提供筛选条件,避免性能损失。
发布日期:2021-05-18 10:08:16
浏览次数:23
分类:精选文章
本文共 1047 字,大约阅读时间需要 3 分钟。
SQLAlchemy查询优化与ORM模型处理
在进行 SQLAlchemy 查询时,理解 result_field 参数的作用对于高效操作至关重要。以下是核心内容的详细说明:
查询结果处理
- 如果 result_field 是字段(Field 类型),则查询结果会是一个 List 对象,反映数据库的真实数据。
- 如果 result_field 是 Class 实例(例如特定的 ORM 模型类),则会返回一个经过初始化的 Model 对象。此时,Model 对象的值可能会由初始化方法(init)中的值覆盖。
query_result = db.session.query(*(result_field_list or [cls])).filter_by(**kwargs).order_by(*(order_by_field_list or [cls.create_time.desc()])).all()
字段与对象处理
- Field 类型:直接返回数据库最终状态的真实数据。
- Class 实例:自动映射到对应的 ORM 模型,并执行初始化过程。如果初始化方法中定义了默认值、计数器等,查询结果可能会受到这些初始化操作的影响。
查询结果排序
- order_by 方法用于定义结果按指定字段排序。
- 若无指定排序字段(order_by_field_list 为空),则使用 create_time 降序作为默认排序依据。
高级查询优化
- 合理选择排序字段,可以显著提升查询效率。
- 每个 filter_by 调用都应谨慎选择条件,避免不必要的数据筛选。
示例代码优化
model = db.session.query(*(result_field_list or [cls])). \ filter_by(**kwargs). \ order_by((order_by_field_list or [cls.create_time.desc()])). \ all()
注意事项
总结
按需处理 result_field 参数并灵活设置排序字段,可以有效优化 SQLAlchemy 查询,提升整体应用性能。代码优化后应保持代码可读性和可维护性,同时合理分配资源。
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年05月07日 15时54分36秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
3、条件查询
2019-03-11
cordova打包apk更改图标
2019-03-11
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2019-03-11
文件系统的层次结构
2019-03-11
vue(渐进式前端框架)
2019-03-11
vscode设置eslint保存文件时自动修复eslint错误
2019-03-11
Remove Extra one 维护前缀最大最小值
2019-03-11
Linux操作系统的安装与使用
2019-03-12
C++ 继承 详解
2019-03-12
OSPF多区域
2019-03-12
Docker入门之-镜像(二)
2019-03-12
去了解拉绳位移编码器的影响因素
2019-03-12
无法初始化Winsock2.2处理
2019-03-12
vMotion 操作失败进度卡在14% ,报错: Operation Timed out
2019-03-12
重置UAG Application admin密码
2019-03-12
Horizon Daas租户管理平台扩展分配时报:内部错误
2019-03-12
嵌入式系统试题库(CSU)
2019-03-12
【自考】之信息资源管理(一)
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12