首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQLAlchemy ORM:多态单表继承,如果找不到"polymorphic_identity“,则回退到父类

SQLAlchemy ORM是一个Python的对象关系映射工具,它提供了一种将关系型数据库中的表和对象之间进行映射的方式。其中,多态单表继承是SQLAlchemy ORM中的一种高级特性。

多态单表继承是一种面向对象的设计模式,它允许在一个表中存储不同类型的对象,并通过一个特殊的字段来区分它们的类型。在SQLAlchemy ORM中,这个特殊的字段就是"polymorphic_identity"。

当使用多态单表继承时,如果无法找到"polymorphic_identity"字段的值,SQLAlchemy ORM会回退到父类。这意味着如果在查询或操作过程中无法确定对象的具体类型,ORM会将其视为父类对象处理。

多态单表继承的优势在于可以将不同类型的对象存储在同一个表中,避免了创建多个表的复杂性。同时,它还提供了更灵活的查询和操作方式,可以根据需要动态地处理不同类型的对象。

在实际应用中,多态单表继承适用于具有共同属性但又有一些特殊属性的对象。例如,一个电商平台中的商品可以有不同类型,如普通商品、促销商品、限时抢购商品等,它们都有一些共同的属性(如名称、价格),但也有一些特殊的属性(如促销价、抢购时间)。通过使用多态单表继承,可以将这些不同类型的商品存储在同一个表中,并根据需要进行查询和操作。

对于腾讯云的相关产品和产品介绍链接地址,可以参考以下内容:

  1. 云数据库 TencentDB:腾讯云提供的高性能、可扩展的云数据库服务,支持多种数据库引擎,包括MySQL、SQL Server、PostgreSQL等。详情请参考:https://cloud.tencent.com/product/tencentdb
  2. 云服务器 CVM:腾讯云提供的弹性计算服务,可以快速创建和管理云服务器实例,支持多种操作系统和应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  3. 人工智能平台 AI Lab:腾讯云的人工智能平台,提供了丰富的人工智能服务和工具,包括图像识别、语音识别、自然语言处理等。详情请参考:https://cloud.tencent.com/product/ailab

请注意,以上只是腾讯云的一些相关产品,其他云计算品牌商也提供类似的产品和服务,可以根据具体需求选择适合的解决方案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SqlAlchemy 2.0 中文文档(九)

SQLAlchemy 支持三种继承形式: 继承 – 几种类别的类别由单个表表示; 具体表继承 – 每种类别的类别都由独立的表表示; 联接继承层次结构在依赖之间分解。...对层次结构中特定子类的查询将作为 SQL JOIN 在其继承路径上的所有之间进行。如果查询的是基查询基,同时可以选择包含其他或允许后续加载特定于子表的属性的选项。...联接继承层次结构中的基将配置具有指示多态鉴别器列以及可选地为基本身配置的多态标识符的其他参数: from sqlalchemy import ForeignKey from sqlalchemy.orm...强烈建议如果需要关系加载和多态加载的灵活性,尽量使用连接或继承如果不需要多态加载,每个完全引用自己的时可以使用普通的非继承映射。...强烈建议如果需要灵活性的关系加载和多态加载,尽可能使用连接或继承如果不需要多态加载,则可以使用普通的非继承映射,如果每个都完全引用其自己的表格。

10710

SqlAlchemy 2.0 中文文档(十六)

重点将放在 连接继承,因为这是最复杂的 ORM 查询情况。 查看此页面的 ORM 设置。 从基 vs....## 单一继承映射的 SELECT 语句 单一继承设置 本节讨论继承,描述在继承中使用单个表表示层次结构中的多个。 查看本节的 ORM 设置。...selectable – 将用于替代生成的 FROM 子句的或子查询。如果任何所需使用具体表继承此参数是必需的,因为 SQLAlchemy 当前无法自动生成之间的 UNION。...如果未提供,则将使用基映射器的polymorphic_on属性(如果有)。这对于默认没有多态加载行为的映射非常有用。 innerjoin – 如果为 True,使用 INNER JOIN。...selectable – 将用于替代生成的 FROM 子句的或子查询。如果所需的任何使用具体表继承,这个参数是必需的,因为 SQLAlchemy 目前无法自动在之间生成 UNION。

11010

SqlAlchemy 2.0 中文文档(六)

这在某些定制方案中可能很有用,以确定是否应该基于本身的参数来执行继承,例如,如果没有主键存在,定义为继承: class AutoTable: @declared_attr def...在某些定制方案中,这可能是有用的,以确定应基于本身的参数进行继承,例如,如果不存在主键,定义为继承: class AutoTable: @declared_attr def _...在一些定制方案中,这可能是有用的,以确定基于本身的参数是否应该进行继承,例如,如果没有主键存在,定义为继承: class AutoTable: @declared_attr def...如果 Base 定义了同名属性,位于继承列表中的第一个将决定在新定义的上使用哪个属性。...我们可以在基中的最低级 __tablename__() 方法中使用此辅助函数,以便我们有条件地如果已经存在,返回 None 作为名,从而默认为继承子类的继承: from sqlalchemy

13010

SqlAlchemy 2.0 中文文档(十)

function sqlalchemy.orm.has_inherited_table(cls: Type[_O]) → bool 给定一个如果继承的任何都有一个映射表,返回 True,否则返回...如果此映射器使用继承从另一个映射器继承,则可以为 None。在使用声明式时,此参数由扩展自动传递,根据通过 DeclarativeBase....polymorphic_load – 在继承层次结构中的子类中指定“多态加载”行为(仅适用于连接和继承)。...共同的级但不同的分支 method isa(other: Mapper[Any]) → bool 如果此映射器从给定的映射器继承返回 True。...这不仅包括直接继承的映射器,还包括所有它们继承的映射器。 attribute single: bool 如果此 Mapper 是继承映射器,表示 True。

10310

SqlAlchemy 2.0 中文文档(三十一)

一旦被配置并生成映射,它会被映射自身,但在其所有子类之后。这是在任何其他 SQLAlchemy API 功能中都找不到的非常独特的映射系统。...,“严格”属性模式被启用,试图将基上的 ORM 映射属性限制为仅当下立即存在的属性,同时仍保留“多态”加载行为。...下面我们建立一个简单的映射与 my_data : from sqlalchemy.orm import DeclarativeBase from sqlalchemy.orm import Mapped...下面我们建立一个简单的映射到my_data: from sqlalchemy.orm import DeclarativeBase from sqlalchemy.orm import Mapped...如果找不到键,返回默认值(如果给定);否则,引发 KeyError。 method popitem() → Tuple[_KT, _VT] 移除并返回一个(key, value)对作为 2 元组。

13520

SqlAlchemy 2.0 中文文档(三十)

如果我们的模式包含user和address,我们可以定义要使用的一个或两个: from sqlalchemy.ext.automap import automap_base from sqlalchemy...如果包含两个且仅两个 ForeignKeyConstraint 对象,并且此中的所有列都是这两个 ForeignKeyConstraint 对象的成员,假定该是“secondary”,并且不会直接映射...请注意,这意味着自动映射将不会为从子类到的外键生成 任何 关系。如果一个映射还具有从子类到的实际关系,那么这些关系需要是显式的。...如果包含两个且仅两个ForeignKeyConstraint对象,并且此中的所有列都是这两个ForeignKeyConstraint对象的成员,假定该是“次要”,并且不会直接映射。...如果包含两个并且仅有两个 ForeignKeyConstraint 对象,并且此中的所有列都是这两个 ForeignKeyConstraint 对象的成员,假定该是一个“次要”,并且不会直接映射

11310

SqlAlchemy 2.0 中文文档(二十五)

mappings - 一系列字典,每个字典包含要插入的映射行的状态,以映射上的属性名称表示。如果映射涉及多个,例如连接继承映射,每个字典必须包含要填充到所有中的所有键。...mappings - 一个字典序列,每个字典包含要更新的映射行的状态,以映射上的属性名称表示。如果映射涉及多个,比如联接继承映射,每个字典可能包含与所有对应的键。...如果在本地找不到尝试根据主键从数据库加载对象,如果找不到创建一个新实例。然后将源实例上的每个属性的状态复制到目标实例。...mappings – 一个字典序列,每个字典包含要插入的映射行的状态,以映射上的属性名称为准。如果映射涉及多个,比如联合继承映射,每个字典必须包含要填充到所有中的所有键。...如果在本地找不到尝试根据主键从数据库加载对象,如果找不到创建一个新实例。然后将源实例上的每个属性的状态复制到目标实例。

7910

SqlAlchemy 2.0 中文文档(五)

混合列 混合关联 混合 _orm.column_property() 和其他 _orm.MapperProperty 使用 Mixins 和基与映射继承模式 在继承...对于继承映射(在映射继承层次结构中详细描述),应将装饰器应用于要映射的每个子类: from sqlalchemy.orm import registry mapper_registry = registry...在使用继承的特定情况下,也可以向映射添加额外的Column对象,在这种情况下,映射的子类上存在额外的列,但它们没有自己的Table。这在继承部分有所说明。...在使用继承的特定情况下,还可以向映射添加其他Column对象,在此情况下,映射的子类上存在其他列,这些列没有自己的Table。这在继承部分进行了说明。...在使用继承的特定情况下,还可以将其他 Column 对象添加到映射中,其中在映射的子类上存在其他列,这些列没有自己的 Table。这在 继承 部分有说明。

9110

python技术面试题(十九)--腾讯

2.多态 答:定义时的类型和运行时的类型不一样,此时就是多态。python中,多态就是弱化类型,重点在于对象参数是否有指定的属性和方法,如果有,就认定合适,而不关心对象的类型是否正确。...4.Django中ORM如何使用? Django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型,通过模型和对象完成数据的增删改查操作。...多继承继承所有的属性和方法。如果多个中有同名的属性和方法,默认使用第一个的属性和方法。...我们可以根据 __mro__(是一个魔法方法,称为方法解析顺序,用来获取当前的方法继承顺序)来查看继承顺序。 在腾讯面试中,面试官质疑我的答案,觉得多个有同名的方法,继承的不是第一个。...7.继承,在执行析构函数时,先执行的,还是先执行子类的? 答:析构时,会先调用子类的析构函数,再调用的。 初始化子类时,会先自动调用的构造函数,然后调用子类的构造函数。

3.7K40

SqlAlchemy 2.0 中文文档(二十四)

如果映射涉及多个,比如联接继承映射,每个字典可能包含对所有对应的键。所有这些已存在且不是主键的键都将应用于 UPDATE 语句的 SET 子句;所需的主键值将应用于 WHERE 子句。...如果在本地找不到,它将尝试根据主键从数据库加载对象,如果找不到创建一个新实例。然后将源实例上的每个属性的状态复制到目标实例。...如果映射涉及多个,例如联接继承映射,每个字典必须包含要填充到所有中的所有键。 return_defaults – 当为 True 时,插入过程将被改变,以确保新生成的主键值将被获取。...mappings – 一个字典序列,每个字典包含要更新的映射行的状态,以映射上的属性名称表示。如果映射涉及多个,例如连接继承映射,每个字典可能包含对应于所有的键。...如果在本地找不到,它会尝试根据主键从数据库加载对象,如果找不到任何对象,创建一个新实例。然后将源实例上的每个属性的状态复制到目标实例。

13410

SqlAlchemy 2.0 中文文档(十三)

请参阅还有 仅写关系 - 完整背景 DynamicMapped - 包含遗留的Query支持 签名 sqlalchemy.orm.WriteOnlyMapped (sqlalchemy.orm.base...当 Query 对象被要求返回完整实体时,将根据主键对条目进行去重,这意味着如果相同的主键值在结果中出现多次,仅存在一个该主键的对象。这不适用于针对个别列的查询。...另请参阅 动态关系加载器 - 完整背景 WriteOnlyMapped - 完全 2.0 版本的风格 签名 sqlalchemy.orm.DynamicMapped (sqlalchemy.orm.base...另请参阅 仅写关系 - 完整背景 DynamicMapped - 包含传统的Query支持 签名 sqlalchemy.orm.WriteOnlyMapped (sqlalchemy.orm.base...当 Query 对象被要求返回完整实体时,将 基于主键去重 条目,这意味着如果相同的主键值会出现在结果中超过一次,该主键的对象只会出现一次。这不适用于针对单个列的查询。

5410

SqlAlchemy 2.0 中文文档(二十三)

注意 对此的假设优化可以包括一次针对关联的所有关联行的单个DELETE语句,然后使用RETURNING来定位受影响的相关子行,但是这目前不是 ORM 工作单元实现的一部分。...当发生刷新时,如果未加载Parent.children集合, ORM 将首先发出 SELECT 语句,以加载与Parent.children对应的Child对象。...如果在上述块内引发了异常,事务将被滚。在这两种情况下,上述Session在退出块后都已准备好用于后续的事务。...如果在上述块中引发了异常,事务将被滚。在这两种情况下,上述 Session 在退出块后都可以在后续事务中使用。...如果Session是在尚未提交或滚的事务内开始的,此方法将取消(即滚)该事务,并且还将清除Session对象状态中包含的所有对象。

11410

SqlAlchemy 2.0 中文文档(四)

_orm.declared_attr() 与继承 Table 和 Mapper 参数 使用 _orm.declared_attr() 生成特定的继承列 从多个混合组合/映射器参数...加载联接继承映射 继承 使用 use_existing_column 解决列冲突 与继承相关的关系 使用 polymorphic_abstract 构建更深层次的层次结构...加载继承映射 具体表继承 具体多态加载配置 抽象具体 经典和半经典具体多态配置 具体继承关系的关系 加载具体继承映射 非传统映射 将映射到多个...__table__ 当使用 Mapper.local_table 属性时,返回的也是这个 FromClause: table = inspect(User).local_table 对于继承映射,其中是没有自己的的子类...__table__ 当使用 Mapper.local_table 属性时,此 FromClause 也将返回: table = inspect(User).local_table 对于继承映射,其中是没有自己的的子类

9410

一个超方便使用SQL的Python神器

ORM即Object Relational Mapper,可以简单理解为数据库和Python之间的映射,通过操作Python,可以间接操作数据库。...Base,该类是sqlalchemy提供的一个基,会对我们声明的Python做一些检查,我将其放在base_model中。...第三 关于数据的创建有两种方式,第一种当然是手动在MySQL中创建,只要你的Python定义没有问题,就可以正常操作;第二种是通过orm框架创建,比如下面 # main.py # 注意这里的导入路径...,Base创建时会寻找继承它的子类,如果路径不对,则无法创建成功 from sqlachlemy_lab import Base, engine if __name__ == '__main__'...2.如果是int类型,不需要指定长度,而如果是varchar类型,必须指定。

79220

Python Web - Flask笔记6

SQLAlchemy提供了一个relationship,这个可以定义属性,以后在访问相关联的的时候就直接可以通过属性访问的方式就可以访问得到了。...示例代码如下: user.extend是一个List的继承,所以使用uselist=False 使用sqlalchemy.orm.backref来定义relationship的反向引用: class...删子删 delete-orphan:表示当对一个ORM对象解除了中的关联对象的时候,自己便会被删除掉。当然如果中的数据被删除,自己也会被删除。...创建ORM模型: 还是跟使用sqlalchemy一样,定义模型。现在不再是需要使用delarative_base来创建一个基。而是使用db.Model来作为基。...以后如果修改了模型,重复4、5步骤。 注意事项:在终端中,如果想要使用alembic,则需要首先进入到安装了alembic的虚拟环境中,不然就找不到这个命令。

1.9K10

SqlAlchemy 2.0 中文文档(十七)

/en/20/orm/queryguide/dml.html 关于本文档 本节利用了首次在 SQLAlchemy 统一教程中展示的 ORM 映射,如声明映射一节所示,以及映射继承层次结构一节中展示的继承映射...为了将继承映射的多态标识限制为特定子类所需的 WHERE 条件会自动包含。这仅适用于没有自己的子类映射器。...如果这两个名称恰好不同,键应与ORM 映射属性名称匹配,而不是实际的数据库列名称。...为了将多态标识限制为继承映射的特定子类,自动包含了 WHERE 条件。这仅适用于没有自己的的子类映射。...为了限制多态标识仅适用于继承映射中的特定子类,WHERE 条件会自动包含。这仅适用于没有自己的的子类映射器。

15810

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券