仅写关系 仅写加载器策略是配置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 2.0 弃用模式 - 如何在 SQLAlchemy 1.4 中使用“2.0 弃用模式”的具体指南。...换句话说,它仅设计为基于删除每个孤儿的一个且仅一个“父”对象的创建,“父”对象在一对多关系中的自然情况下导致“多”侧的相关项目随后被删除。...请注意,此验证器的范围有限,并不会阻止通过其他方向创建多个“父级”。...另请参阅 级联 delete-orphan 实例已通过其属性与的实例关联,并且只允许一个父级。 实例已通过其属性与的实例关联,并且只允许一个父级。...当使用relationship.single_parent标志,并且同时为一个对象分配了多个“父级”对象时,会发出此错误。
如何在给定映射类的情况下获取所有列、关系、映射属性等的列表?...基于列的属性可以在映射中被赋予任何所需的名称。请参阅明确命名声明式映射的列。 如何在给定一个映射类的情况下获取所有列、关系、映射属性等列表? 所有这些信息都可以从 Mapper 对象中获得。...如何在 ORM 查询中使用文本 SQL? 调用 Session.delete(myobject) 后,我的对象未从父集合中移除! 加载对象时为什么不调用我的 __init__()?...为了做到这一点,它必须获取主对象主键在每个子条目中重复的行。这种模式可以继续到更深层的子集合,以便为单个主对象(如User(id=5))处理多行。...为了做到这一点,它必须获取重复了主导对象主键的行,以便每个子条目。这种模式可以继续到更进一步的子集合,以便为单个主导对象,如User(id=5),处理多行。
当您的对象加载时,SQLAlchemy 将通过 append() 将实例添加到列表中。...语句的加载器选项,用于将特定的分片 id 应用于主查询,以及额外的关系和列加载器。...,像defer()这样的延迟列加载器,以及惰性关系加载器lazyload()。...,以及额外的关系和列加载器。...语句的加载器选项,可将特定的 shard id 应用于主查询以及用于额外的关系和列加载器。
['subchild1', 'child2'] ```## 配置自引用的急切加载 在正常查询操作期间,通过从父表到子表的连接或外连接来发生关系的急切加载,以便可以从单个 SQL 语句或所有子集合的第二个语句中填充父对象及其直接子集合或引用...然而,要使用自引用关系进行急切加载,SQLAlchemy 需要告知应该连接和/或查询多少级深度;否则,急切加载将根本不会发生。...['subchild1', 'child2'] 配置自引用关系的急切加载 通过在正常查询操作期间从父表到子表使用连接或外连接来进行关系的急切加载,以便可以从单个 SQL 语句或所有直接子集合的第二个语句中填充父表及其直接子集合或引用...然而,要想使用自引用关系的急切加载,需要告诉 SQLAlchemy 应该加入和/或查询多少级深度;否则,急切加载将根本不会发生。...relationship()查找此外键状态,因为它决定了它应该如何加载和持久化此关系的数据。然而,relationship.primaryjoin参数可以用来创建不涉及任何“架构”级外键的连接条件。
当需要影响大量行而无需构建和操作映射对象时,这种用法尤为重要,因为对于简单、性能密集型的任务,如大批量插入,这可能是繁琐和不必要的。...当需要影响大量行而无需构造和操作映射对象时,此使用模式尤为重要,因为对于简单、性能密集的任务(如大型批量插入),构造和操作映射对象可能会很麻烦和不必要。...- 在关系加载技术中 联合加载 joinedload() 立即加载策略是 SQLAlchemy 中最古老的立即加载器,它通过将传递给数据库的 SELECT 语句与 JOIN(取决于选项可能是外连接或内连接...请参阅 使用 raiseload 防止不必要的惰性加载 - 在关系加载技术中 Selectin Load 在现代 SQLAlchemy 中最有用的加载器是 selectinload() 加载器选项。...- 在关系加载技术中 加载连接 joinedload() 预加载策略是 SQLAlchemy 中最古老的预加载器,它通过在传递给数据库的 SELECT 语句中添加 JOIN(根据选项可能是外连接或内连接
前言 一个人有多个收件地址,这就是一对多关系 一对多(one-to-many)关系 关系使用 relationship() 函数表示。...这个函数返回一个可以做许多事情的新属性。在本案例中,我们让它指向 Address 类并加载多个地址。它如何知道会返回不止一个地址? 因为 SQLALchemy 从您的声明中猜测了一个有用的默认值。...lazy 决定了 SQLAlchemy 什么时候从数据库中加载数据: ‘select’ (默认值) 就是说 SQLAlchemy 会使用一个标准的 select 语句必要时一次加载数据。...‘joined’ 告诉 SQLAlchemy 使用 JOIN 语句作为父级在同一查询中来加载关系。 ‘subquery’ 类似 ‘joined’ ,但是 SQLAlchemy 会使用子查询。...‘dynamic’ 在有多条数据的时候是特别有用的。不是直接加载这些数据,SQLAlchemy 会返回一个查询对象,在加载数据前您可以过滤(提取)它们。
创建和持久化新的只写集合 向现有集合添加新项目 查询项目 删除项目 批量插入新项目 项目的批量更新和删除 只写集合 - API 文档 动态关系加载器 动态关系加载器...另见 关联代理 - 允许父级和子级之间进行直接“多对多”样式访问,用于三类关联对象映射。...此评估中可用的完整命名空间包括为此声明基类映射的所有类,以及sqlalchemy包的内容,包括表达式函数如desc()和sqlalchemy.sql.functions.func: class Parent...这种行为在删除孤儿中描述。 另请参阅 删除 使用 ORM 关系的外键 ON DELETE 级联 删除孤儿 多对一 多对一在父表中放置了一个引用子表的外键。...在这个评估中可用的完整命名空间包括为这个声明基类映射的所有类,以及sqlalchemy包的内容,包括表达式函数如desc()和sqlalchemy.sql.functions.func: class Parent
此标志用于诸如从二级缓存传输对象图到Session,或将刚加载的对象传输到工作线程或进程拥有的Session中而无需重新查询数据库的情况。...如果惰性加载的关系不在 Session.refresh.attribute_names 中命名,则它们将保持为“惰性加载”属性,并且不会隐式刷新。...此标志用于将对象图转移到来自第二级缓存的Session中,或者将刚加载的对象转移到由工作线程或进程拥有的Session中,而无需重新查询数据库。...如果惰性加载的关系未在 Session.refresh.attribute_names 中命名,则它们将保持为“惰性加载”属性,不会被隐式刷新。...如果惰性加载的关系未在 Session.refresh.attribute_names 中命名,则它们将保持为“惰性加载”属性,不会被隐式刷新。
然后,您可能需要对DataFrame中的数据进行一些处理,并希望将其存储在关系数据库等更持久的位置。...本教程介绍了如何从CSV文件加载pandas DataFrame,如何从完整数据集中提取一些数据,然后使用SQLAlchemy将数据子集保存到SQLite数据库 。...让我们继续将此子集保存到SQLite关系数据库中。...然后to_sql 在save_df对象上调用该方法时使用该变量,这是我们的pandas DataFrame,它是原始数据集的子集,从原始7320中筛选出89行。...我们只是将数据从CSV导入到pandas DataFrame中,选择了该数据的一个子集,然后将其保存到关系数据库中。
此外,在对象上调用行级刷新操作将使对象进入新的加载器上下文,从而干扰现有的加载上下文。...此外,在对象上调用行级刷新操作将使对象进入新的加载程序上下文,干扰现有的加载上下文。...在版本 1.4 中,QueryEvents.before_compile() 事件不再用于ORM 级别的属性加载,例如延迟加载或过期属性以及关系加载器的加载。...这影响了烘焙查询扩展的直接使用以及它在关系的惰性加载器和急切加载器中的操作。...这影响到对烘焙查询扩展的直接使用以及它在延迟加载器和关系的贪婪加载器中的操作。
参考:#10279 [orm] [bug] 为 selectin_polymorphic() 加入了新的功能,允许其他加载器选项被捆绑为同级,并且引用其子类中的一个,位于父加载器选项的子选项中。...作为这个改变的一部分,改进了Load.selectin_polymorphic() 方法/加载策略的行为,因此子类加载不会加载来自父表的大多数已加载列,当选项用于已经进行关系加载的类时。...如果刷新操作没有指示要刷新父行上的任何列,则主键列仍将包括在刷新操作中,这允许加载继续到正常情况下指示的次要关系加载器。...作为此更改的一部分,改进了Load.selectin_polymorphic()方法/加载策略的行为,因此在对已经关系加载的类使用该选项时,子类加载不会加载父表中已加载的大多数列。...作为这一变化的一部分,改进了 Load.selectin_polymorphic() 方法/加载器策略的行为,以便在已经对父表进行关系加载时,子类加载不会加载大部分已加载列。
可以使用 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 版中的新功能。...与标量一对多相比,将生成一个子句,比较父级中的目标列与给定目标。 与标量多对多相比,关联表的别名也将被渲染,形成一个自然连接,作为查询主体的一部分。
领取专属 10元无门槛券
手把手带您无忧上云