首页 > 数据库 >sqlalchemy relationship lazy属性

sqlalchemy relationship lazy属性

时间:2024-04-08 11:24:08浏览次数:29  
标签:lazy sqlalchemy 属性 relationship 对象 关联 查询 数据 加载

  1. 'select' (默认):
    • 懒加载 (Lazy Loading): 当访问与父对象关联的子对象集合或单个对象属性时,才会触发一次 SQL 查询,从数据库中获取相关数据。这是最常用的加载策略,因为它延迟了数据的获取,直到真正需要时才执行查询,有助于减少不必要的数据库交互。
  2. 'joined':
    • 连接加载 (Joined Load): 在查询父对象时,使用 SQL JOIN 语句一次性从数据库中获取父对象及其关联的子对象数据。这样,当访问关联属性时,数据已经存在于内存中,无需额外的数据库查询。适用于经常需要同时使用父对象和关联对象的场景,可以减少查询次数,提高性能,但可能导致查询结果集较大,尤其是当关联数据量较大时。
  3. 'subquery':
    • 子查询加载 (Subquery Load): 类似于连接加载,但使用子查询而不是直接JOIN。当查询父对象时,会生成一个针对关联对象的子查询,然后在主查询中使用子查询的结果作为过滤条件。这种方式在某些情况下可能会比直接JOIN性能更好,特别是在存在多对一或一对一关系并且关联对象有大量数据时,可以避免笛卡尔积问题。访问关联属性时,数据也已预先加载。
  4. 'immediate' (或 'eager'):
    • 即时加载 (Eager Loading): 在查询父对象时,立即通过额外的 SQL 查询获取关联的子对象数据,将关联数据与父对象一起返回。这通过使用 with_entities() 和 contains_eager() 函数来实现。即时加载可以在一次查询中获取完整的关联数据,减少了后续单独查询的需要,但如果关联数据量大或层次深,可能导致查询复杂度和数据传输量增加。
  5. 'dynamic':
    • 动态加载 (Dynamic Load): 提供了一种类似懒加载的体验,但在访问关联属性时,不会触发单个对象的加载,而是返回一个特殊类型的查询对象(通常是 SQL 查询生成器),可以进一步进行过滤、排序等操作后再执行查询。适用于需要灵活查询关联数据,或者关联数据量非常大且需要分页或筛选的情况。
  6. 'noload':
    • 不加载 (No Load): 关联属性被完全忽略,不会在任何查询中加载关联数据。当你明确知道不需要关联数据,或者为了防止意外加载而希望禁用某个关联时,可以使用此选项。
  7. 'raise':
    • 抛出异常 (Raise Error): 当尝试访问未加载的关联属性时,会引发一个异常,而不是自动执行查询。这种模式用于严格的数据访问控制,确保在访问关联数据前显式地加载它们。
  8. 'inline':
    • 内联加载 (Inline Load): 仅适用于一对一关系。将关联对象的列直接内嵌到父对象的查询结果中,使得关联对象看起来就像是父对象的一部分。这种加载方式可以简化查询结果结构,尤其适用于需要将数据序列化为扁平结构(如JSON)的场景。

标签:lazy,sqlalchemy,属性,relationship,对象,关联,查询,数据,加载
From: https://www.cnblogs.com/zjyss/p/18120726

相关文章

  • ida数据提取技巧-利用LazyIDA插件实现一键提取无法识别的字符串
    首先具体介绍一下这个技巧的意思,因为标题可能没有说的很明白在使用ida逆向分析的过程中,会遇到某些密文、密钥之类的字符串,而这些字符串往往不全是由正常字符组成的,其中存在一些非常规字符,而一旦ida在识别字符串的过程识别到这种字符,就会认为该字符串到此已经结束(但我们知道,字......
  • react-lazy-load-image-component
    react-lazy-load-image-component1.6.0 • Public • Published 10monthsago ReadmeCode Beta2Dependencies343Dependents30VersionsReactLazyLoadImageComponentReactComponenttolazyloadimagesandothercomponents/elements.SupportsI......
  • SQLAlchemy 基础知识 - autoflush 和 autocommit(转)
    原文:https://zhuanlan.zhihu.com/p/48994990作者:Cosven来源:知乎这篇文章致力于解决以下疑问(本文以MySQL为例):SQLAlchemy的session是指什么?session的autoflush参数是干什么的,我到底要不要开启它?session的autocommit参数又是什么,它和autoflush的区别是什么?SQLAl......
  • Flask python 开发篇:模型(model)Flask-SQLAlchemy的使用
    Flask-SQLAlchemy实现模型一、为什么使用模型?二、Flask-SQLAlchemy的引入三、使用Flask-SQLAlchemy构建模型文件3.1、安装扩展3.2、配置3.3、实战使用3.4、与蓝图相结合使用一、为什么使用模型?上一篇分享了蓝图的使用,也说蓝图相当于了php中控制器+路由的使用,那根......
  • 使用FastAPI+SQLAlchemy+Redis+Celery 编写一个完整的用户登录验证API
    使用PyQt5+FastAPI+SQLAlchemy+Redis+Celery做一个登录注册页(三)本文将介绍用PyQt5+FastAPI+SQLAlchemy+Redis+Celery做的一个登录注册页,使用邮箱接收验证码,本文介绍是前后端分离的实现方式,厚后端使用FastAPI+SQLAlchemy+Redis+Celery,你可以将PyQt5改为PySide2以获得更宽松......
  • SQLAlchemy 快速入门
    SQLAlchemyORM工具库https://docs.sqlalchemy.org/en/20/index.htmlORM快速入门声明模型DeclareModels我们定义模块级构造,这些构造将形成我们将从数据库查询的结构。这种结构被称为声明式映射(DeclarativeMapping),它同时定义了Python对象模型,以及描述特定数据库中存在......
  • @Autowired,@Resource,@Value,@Lazy注入的核心逻辑原理
    classDefaultListableBeanFactoryextendsAbstractAutowireCapableBeanFactory{@Override@NullablepublicObjectresolveDependency(DependencyDescriptordescriptor,StringrequestingBeanName,Set<String>autowiredBeanNames,TypeConverter......
  • C#之Lazy<T>
    Lazy<T>主要用在单例模式,是一种延迟加载(LazyLoading)的机制,它允许您推迟对象的创建直到第一次访问该对象。这种方式在需要时才分配资源,能够提高性能和资源利用率。Lazy类提供了一个简单且线程安全的方法来实现延迟加载。以下是Lazy的一些主要特点和用法:延迟加载:Lazy允许您将对象......
  • 【Lazy ORM】 小工具 acw 本地客户端 你负责点击页面,他负责输出代码
    介绍wu-smart-acw-client简称acw-client,是一个基于LazyORM定制的客户端代码生成小工具LazyORM小工具acw本地客户端你负责点击页面,他负责输出代码安装<dependency><groupId>top.wu2020</groupId><artifactId>wu-smart-acw-cli......
  • 【Lazy ORM】 小工具 acw 本地客户端 你负责点击页面,他负责输出代码
    介绍wu-smart-acw-client简称acw-client,是一个基于LazyORM定制的客户端代码生成小工具LazyORM小工具acw本地客户端你负责点击页面,他负责输出代码安装<dependency><groupId>top.wu2020</groupId><artifactId>wu-smart-acw-cli......