仅写关系 仅写加载器策略是配置relationship()的主要方法,该方法将保持可写性,但不会加载其内容到内存中。..._MappedAnnotationBase) ## 动态关系加载器 遗留特性 “动态”延迟加载策略是现在在仅写关系部分中描述的“write_only”策略的遗留形式。...只写关系 只写 加载器策略是配置 relationship() 的主要手段,它将保持可写,但不会加载其内容到内存中。...请参阅 delete-orphan 中的 Cascades 文档。 2.0 版本中的新功能:添加了“只写”关系加载器。...相反,WriteOnlyCollection 包括 SQL 生成助手,如 WriteOnlyCollection.select(),它将生成一个预先配置了当前父行的正确 WHERE / FROM 条件的
: directed_graph.py ### 作为字典的动态关系 演示如何在“动态”关系之上放置类似字典的外观,以便字典操作(假设简单字符串键)可以在不一次加载完整集合的情况下操作大集合。...) 文件清单: directed_graph.py ### 动态关系作为字典 展示了如何在“动态”关系之上放置类似字典的外观,以便字典操作(假设简单字符串键)可以在一次加载完整集合的情况下操作大型集合。...: directed_graph.py 动态关系作为字典 演示了如何在“动态”关系之上放置类似于字典的外观,以便字典操作(假设简单的字符串键)可以在大型集合上进行操作,而无需一次加载整个集合。...relationship_caching.py - 展示了如何在关系终点添加缓存选项,以便惰性加载从缓存中加载。...+ relationship_caching.py - 展示了如何在关系终点添加缓存选项,以便惰性加载从缓存中加载。
它通过将 JOIN(默认为 LEFT OUTER join)连接到发出的 SELECT 语句,并且从与父级相同的结果集中填充目标标量/集合来工作。...“子查询”加载与由 Yield Per 提供的“批量”加载(对集合和标量关系均适用)不兼容。 出于上述原因,“selectin”策略应优先于“子查询”。...由此自然地可以选择修改要存储在集合中的值,通过编写 SQL 来加载集合或标量属性的子集。...**kw 可能包含更改返回集合的标志,例如返回子集以减少更大的遍历,或者返回来自不同上下文的子项(例如模式级集合而不是子句级集合)。...**kw 可能包含更改返回集合的标志,例如返回子项的子集以减少较大的遍历,或者从不同上下文返回子项(例如模式级集合而不是从子句级返回的)。
当“更新”不再“被动”时,这表示 SQLAlchemy 将为引用具有更改的主键值的父对象的集合中的对象单独发出 UPDATE 语句。这也意味着如果集合尚未在本地存在,那么集合将完全加载到内存中。...另请参阅 关系 X 将列 Q 复制到列 P,与关系‘Y’冲突 - 用法示例 cascade – 一个逗号分隔的级联规则列表,确定 Session 操作应该如何从父级到子级进行“级联”。...join_depth – 当非None时,表示“急切”加载器应该在自引用或循环关系上连接多少级深度的整数值。该数字计算相同 Mapper 在加载条件中沿着特定连接分支出现的次数。...但请注意,SQLAlchemy 无法 对超过一级的级联发出 UPDATE。...这对于快速限制特定关系路径上连接范围的方式以及配置加载策略(如joinedload()和selectinload())非常有用。
在某些情况下,被孤立的对象仍然可能被拉入原父级的Session中;这是为了使刷新过程可以适当地处理相关对象。...SQLAlchemy 允许使用 ForeignKey 和 ForeignKeyConstraint 构造配置这些模式级 DDL 行为;如何在 Table 元数据与这些对象的使用一起配置,在 ON UPDATE...当处理一个与父对象“拥有”关系的相关对象时,这是一种常见的特性,该关系具有 NOT NULL 外键,因此从父集合中删除项目会导致其被删除。...它不适用于“批量”删除,这将使用delete()构造来发出,如 ORM UPDATE and DELETE with Custom WHERE Criteria 中所示。...### 使用外键 ON DELETE 处理多对多关系 如 使用级联删除处理多对多关系 中所述,“delete”级联也适用于多对多关系。
propagate_to_loaders - 默认为 True,适用于关系加载器,如延迟加载器。这表示选项对象本身包括 SQL 表达式随每个加载的实例一起传递。...当使用 yield_per 时,ORM 将会将 ORM 结果批量成子集合,并在迭代 Result 对象时单独从每个子集合中产生行,这样 Python 解释器就不需要声明非常大的内存区域,这既耗时又导致内存使用过多...property – 类绑定属性,表示应该使用实例中的哪种关系来协调父/子关系。 from_entity – 要考虑为左侧的实体。默认为 Query 本身的“零”实体。...propagate_to_loaders – 默认为 True,适用于关系加载器,如惰性加载器。这表示选项对象本身,包括 SQL 表达式,将随每个加载的实例一起传递。...property – 类绑定属性,指示应使用实例中的哪个关系来协调父/子关系。 from_entity – 要考虑为左侧的实体。默认为Query本身的“零”实体。
此对象表示查询中关系的“路径”,当加载特定对象或集合时。...此标志用于诸如将对象图传输到从第二级缓存中的Session中,或者将刚加载的对象传输到由工作线程或进程拥有的Session中,而无需重新查询数据库的情况。...如果惰性加载的关系未在Session.refresh.attribute_names中命名,则它们保持为“惰性加载”属性,不会被隐式刷新。...attribute parent 此 SessionTransaction 的父级 SessionTransaction。...此标志用于将对象图传输到从第二级缓存中的Session 中,或者将刚加载的对象传输到由工作线程或进程拥有的Session 中,而无需重新查询数据库。
当您的对象加载时,SQLAlchemy 将通过 append() 将实例添加到列表中。...语句的加载器选项,用于将特定的分片 id 应用于主查询,以及额外的关系和列加载器。...,像defer()这样的延迟列加载器,以及惰性关系加载器lazyload()。...,以及额外的关系和列加载器。...语句的加载器选项,可将特定的 shard id 应用于主查询以及用于额外的关系和列加载器。
['subchild1', 'child2'] ```## 配置自引用的急切加载 在正常查询操作期间,通过从父表到子表的连接或外连接来发生关系的急切加载,以便可以从单个 SQL 语句或所有子集合的第二个语句中填充父对象及其直接子集合或引用...然而,要使用自引用关系进行急切加载,SQLAlchemy 需要告知应该连接和/或查询多少级深度;否则,急切加载将根本不会发生。...['subchild1', 'child2'] 配置自引用关系的急切加载 通过在正常查询操作期间从父表到子表使用连接或外连接来进行关系的急切加载,以便可以从单个 SQL 语句或所有直接子集合的第二个语句中填充父表及其直接子集合或引用...然而,要想使用自引用关系的急切加载,需要告诉 SQLAlchemy 应该加入和/或查询多少级深度;否则,急切加载将根本不会发生。...relationship()查找此外键状态,因为它决定了它应该如何加载和持久化此关系的数据。然而,relationship.primaryjoin参数可以用来创建不涉及任何“架构”级外键的连接条件。
前言 一个人有多个收件地址,这就是一对多关系 一对多(one-to-many)关系 关系使用 relationship() 函数表示。...这个函数返回一个可以做许多事情的新属性。在本案例中,我们让它指向 Address 类并加载多个地址。它如何知道会返回不止一个地址? 因为 SQLALchemy 从您的声明中猜测了一个有用的默认值。...lazy 决定了 SQLAlchemy 什么时候从数据库中加载数据: ‘select’ (默认值) 就是说 SQLAlchemy 会使用一个标准的 select 语句必要时一次加载数据。...‘joined’ 告诉 SQLAlchemy 使用 JOIN 语句作为父级在同一查询中来加载关系。 ‘subquery’ 类似 ‘joined’ ,但是 SQLAlchemy 会使用子查询。...‘dynamic’ 在有多条数据的时候是特别有用的。不是直接加载这些数据,SQLAlchemy 会返回一个查询对象,在加载数据前您可以过滤(提取)它们。
当需要影响大量行而无需构建和操作映射对象时,这种用法尤为重要,因为对于简单、性能密集型的任务,如大批量插入,这可能是繁琐和不必要的。...当需要影响大量行而无需构造和操作映射对象时,此使用模式尤为重要,因为对于简单、性能密集的任务(如大型批量插入),构造和操作映射对象可能会很麻烦和不必要。...- 在关系加载技术中 联合加载 joinedload() 立即加载策略是 SQLAlchemy 中最古老的立即加载器,它通过将传递给数据库的 SELECT 语句与 JOIN(取决于选项可能是外连接或内连接...请参阅 使用 raiseload 防止不必要的惰性加载 - 在关系加载技术中 Selectin Load 在现代 SQLAlchemy 中最有用的加载器是 selectinload() 加载器选项。...- 在关系加载技术中 加载连接 joinedload() 预加载策略是 SQLAlchemy 中最古老的预加载器,它通过在传递给数据库的 SELECT 语句中添加 JOIN(根据选项可能是外连接或内连接
创建和持久化新的只写集合 向现有集合添加新项目 查询项目 删除项目 批量插入新项目 项目的批量更新和删除 只写集合 - API 文档 动态关系加载器 动态关系加载器...另见 关联代理 - 允许父级和子级之间进行直接“多对多”样式访问,用于三类关联对象映射。...此评估中可用的完整命名空间包括为此声明基类映射的所有类,以及sqlalchemy包的内容,包括表达式函数如desc()和sqlalchemy.sql.functions.func: class Parent...这种行为在删除孤儿中描述。 另请参阅 删除 使用 ORM 关系的外键 ON DELETE 级联 删除孤儿 多对一 多对一在父表中放置了一个引用子表的外键。...在这个评估中可用的完整命名空间包括为这个声明基类映射的所有类,以及sqlalchemy包的内容,包括表达式函数如desc()和sqlalchemy.sql.functions.func: class Parent
然后,您可能需要对DataFrame中的数据进行一些处理,并希望将其存储在关系数据库等更持久的位置。...本教程介绍了如何从CSV文件加载pandas DataFrame,如何从完整数据集中提取一些数据,然后使用SQLAlchemy将数据子集保存到SQLite数据库 。...让我们继续将此子集保存到SQLite关系数据库中。...然后to_sql 在save_df对象上调用该方法时使用该变量,这是我们的pandas DataFrame,它是原始数据集的子集,从原始7320中筛选出89行。...我们只是将数据从CSV导入到pandas DataFrame中,选择了该数据的一个子集,然后将其保存到关系数据库中。
此标志用于诸如从二级缓存传输对象图到Session,或将刚加载的对象传输到工作线程或进程拥有的Session中而无需重新查询数据库的情况。...如果惰性加载的关系不在 Session.refresh.attribute_names 中命名,则它们将保持为“惰性加载”属性,并且不会隐式刷新。...此标志用于将对象图转移到来自第二级缓存的Session中,或者将刚加载的对象转移到由工作线程或进程拥有的Session中,而无需重新查询数据库。...如果惰性加载的关系未在 Session.refresh.attribute_names 中命名,则它们将保持为“惰性加载”属性,不会被隐式刷新。...如果惰性加载的关系未在 Session.refresh.attribute_names 中命名,则它们将保持为“惰性加载”属性,不会被隐式刷新。
此外,在对象上调用行级刷新操作将使对象进入新的加载器上下文,从而干扰现有的加载上下文。...此外,在对象上调用行级刷新操作将使对象进入新的加载程序上下文,干扰现有的加载上下文。...在版本 1.4 中,QueryEvents.before_compile() 事件不再用于ORM 级别的属性加载,例如延迟加载或过期属性以及关系加载器的加载。...这影响了烘焙查询扩展的直接使用以及它在关系的惰性加载器和急切加载器中的操作。...这影响到对烘焙查询扩展的直接使用以及它在延迟加载器和关系的贪婪加载器中的操作。
可以使用 pip 使用“mypy”额外钩子安装 Mypy: pip install sqlalchemy[mypy] 插件本身如 Configuring mypy to use Plugins 中描述的那样配置...映射关系 该插件对使用类型推断来检测关系的类型有限支持。...class sqlalchemy.ext.mutable.Mutable 定义透明传播更改事件到父对象的混入。 查看在标量列值上建立可变性中的示例以获取用法信息。...根据父类是Mutable类型还是MutableComposite类型,在不同的情况下调用此方法。对于前者,在属性设置操作和 ORM 加载操作期间都会调用它。...根据父类是Mutable类型还是MutableComposite类型,在不同的情况下调用此方法。对于前者,它在属性集操作和 ORM 加载操作期间都会被调用。
如果值尚未加载,或者在对象的字典中不存在,则返回 NO_VALUE。 attribute value 返回此属性的值。...在 SQLAlchemy 1.0 中,这仅用于通过查询选项设置的延迟加载器/延迟加载器。 以前,可调用函数还用于通过在此字典中存储与 InstanceState 本身的链接来指示过期属性。...Mapped最突出的用途是在声明式映射形式的Mapper配置中,当显式使用时,它驱动 ORM 属性(如mapped_class()和relationship())的配置。...一些后端,如 PostgreSQL 和 MariaDB,可能会将标志作为模式的一部分来指定。 1.4 版中的新功能。...与标量一对多相比,将生成一个子句,比较父级中的目标列与给定目标。 与标量多对多相比,关联表的别名也将被渲染,形成一个自然连接,作为查询主体的一部分。
请参阅下一节在加载时保持非映射状态了解如何在加载对象时调用特殊逻辑的基础知识。 包含显式__init__()方法的类将保留该方法,并且不会应用默认构造函数。...提示 命令式映射形式是 SQLAlchemy 在 2006 年的最初版本中少用的一种映射形式。它本质上是绕过声明式系统提供一种更“精简”的映射系统,不提供现代特性,如PEP 484支持。...警告 类的__init__()方法仅在 Python 代码中构造对象时调用,而不是在从数据库加载或刷新对象时调用。请参阅下一节在加载过程中保持非映射状态,了解如何在加载对象时调用特殊逻辑的入门知识。...== "some name")).first() 这是因为从数据库加载时,用于构造对象的操作(在上面的示例中为User)更类似于反序列化,如取消持久性,而不是初始构造。...警告 当对象在 Python 代码中构造时才调用类的 __init__() 方法,而不是在从数据库加载或刷新对象时。请参阅下一节在加载时保持非映射状态,了解如何在加载对象时调用特殊逻辑的基本知识。
当为True时,指定对由此映射器映射的对象应用“传统”孤立考虑,这意味着仅当它从指向此映射器的所有父级中解除关联时,即将删除孤立级联的挂起(即,非持久性)对象才会自动从所拥有的Session中清除。...新的默认行为是,当对象与指定了delete-orphan级联的任何父级之一解除关联时,对象会自动从其父级中清除。此行为与持久性对象的行为更一致,并允许行为在更多的场景中独立于孤立对象是否已刷新。...在非继承场景中,此属性始终为此Mapper。在继承场景中,它引用继承链中所有其他Mapper对象的父级Mapper。 这是在映射器构建期间确定的只读属性。如果直接修改,行为未定义。...method common_parent(other: Mapper[Any]) → bool 如果给定的映射器与此映射器共享一个共同的继承父级,则返回 true。...共同的父级但不同的分支 method isa(other: Mapper[Any]) → bool 如果此映射器从给定的映射器继承,则返回 True。
一、模型继承 1、父类没有抽象化 子类不会生成表,父类会生成表,并且将子类独有的字段放入父类表中 ...user lazy参数 决定了 SQLAlchemy 什么时候从数据库中加载数据,有四个可选方式 select(默认值):SQLAlchemy 会在使用一个标准 select 语句时一次性加载数据...joined:让 SQLAlchemy 当父级使用 JOIN 语句是,在相同的查询中加载关系 subquery:类似 joined ,但是 SQLAlchemy 会使用子查询 dynamic:SQLAlchemy...会返回一个查询对象,在加载这些条目时才进行加载数据,大批量数据查询处理时推荐使用。...class="hljs-string">'pages', lazy='dynamic')) secondary参数:指定多对多关系中关系表的名字
领取专属 10元无门槛券
手把手带您无忧上云