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

SqlAlchemy 2.0 中文文档(十五)

这两种用例是: 一个包含对自身的外键,而且单个行将具有指向其自身主键的外键值。 两个都包含对另一个的外键引用,每个中的一行引用另一个中的另一行。...这两种用例是: 一张包含一个指向自身的外键,而且一行将具有指向自己主键的外键值。 两个分别包含一个外键引用另一个,每个中的一行引用另一个。...当关系引用通过不可为空的本地外键引用对象时,或者引用为一对一或保证具有一个或至少一个条目的集合时,可以将此标志设置为True。...当特定的映射安排将导致两行彼此依赖时,请使用此标志,例如,一个与一组子行之间存在一对多关系,并且还有一个列引用该列表中的单个子行(即两个表相互包含对方的外键)。...有关这两种形式的示例,请参见同时选择多个 ORM 实体部分。 链接多个 要构建一系列 JOIN,可以使多个Select.join()调用。关系绑定属性同时暗示 JOIN 的左侧和右侧。

22910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SqlAlchemy 2.0 中文文档(三十)

    具有继承关系关系 automap 不会在处于继承关系两个类之间生成任何关系。...在下面的例子中,由于 Engineer 到 Employee 有两个单独的外键,我们需要设置我们想要的关系以及 inherit_condition,因为这些都不是 SQLAlchemy 可以猜测的: class...在跨多个模式自动映射同名表时 对于常见情况,即多个模式可能具有相同命名的,因此会生成相同命名的类,可以通过使用AutomapBase.prepare.classname_for_table钩子来根据每个模式应用不同的类名来解决冲突...具有继承关系关系 automap 不会在处于继承关系两个类之间生成任何关系。...在下面的例子中,由于从 Engineer 到 Employee 有两个单独的外键,我们需要设置我们想要的关系以及 inherit_condition,因为这些是 SQLAlchemy 无法猜测的事情:

    27310

    SqlAlchemy 2.0 中文文档(四)

    SQLAlchemy 统一教程的处理数据库元数据中介绍了如何使用核心和 ORM 方法设置元数据。上述映射是所谓的注释声明配置的示例。...如何选择对象和单独列的更多详细信息请参阅选择 ORM 实体和列。 使用 JOIN 的 SELECT 在 SQL 中,一次查询多个是非常常见的,而 JOIN 关键字是实现这一目的的主要方法。...') 上述查询示例说明了多个 WHERE 条件如何自动使用 AND 连接,并且展示了如何使用 SQLAlchemy 列对象创建“相等性”比较,该比较使用了重载的 Python 方法ColumnOperators...加载单继承映射 具体表继承 具体多态加载配置 抽象具体类 经典和半经典具体多态配置 具体继承关系关系 加载具体继承映射 非传统映射 将类映射到多个...ORM 映射风格 SQLAlchemy 具有两种不同的映射器配置风格,然后具有更多的子选项来设置它们。

    26310

    SqlAlchemy 2.0 中文文档(三)

    先决条件部分 - 教程中 ORM 重点部分建立在本文档中的两个先前 ORM 中心部分的基础上: 使用 ORM 会话执行 - 介绍如何创建 ORM Session对象 使用 ORM 声明性表单定义元数据...如上所示在两个relationship()对象上配置的relationship.back_populates参数,建立了这两个relationship()构造应被视为彼此补充;我们将在下一节中看到这是如何运作的...为了描述如何之间进行连接,这些方法要么根据元数据结构中存在的单个明确的ForeignKeyConstraint对象推断出 ON 子句,该对象链接了这两个,要么我们可以提供一个明确的 SQL 表达式构造...为了描述如何之间进行连接,这些方法要么**根据元数据结构中链接两个的单个明确的 ForeignKeyConstraint 对象推断出 ON 子句,要么我们可以提供一个明确的 SQL 表达式构造,...为了描述如何之间进行连接,这些方法根据元数据结构中链接两个的单一明确ForeignKeyConstraint对象的存在推断 ON 子句,或者我们可以提供一个明确的 SQL 表达式构造来指示特定的

    36920

    SqlAlchemy 2.0 中文文档(十九)

    读者应熟悉关系配置和基本用法。 大多数示例假定“用户/地址”映射设置类似于在选择设置中所示的设置SQLAlchemy 的一个重要部分是在查询时提供对相关对象加载方式的广泛控制。...可能访问其他未急加载的属性的代码问题,不希望延迟加载,可以使用raiseload()策略来解决;这个加载器策略用引发一个具有信息性错误的方式替换了惰性加载的行为: from sqlalchemy import...要仅为Order对象设置raiseload(),请指定具有Load的完整路径: from sqlalchemy import select from sqlalchemy.orm import joinedload...注意 immediateload.recursion_depth 选项当前仅支持自引用关系。目前还没有选项可以自动遍历具有多个涉及的关系的递归结构。...对于不希望进行延迟加载的其他属性的代码问题,可以使用 raiseload() 策略来解决;此加载器策略用具有信息性错误引发替换了延迟加载的行为: from sqlalchemy import select

    25110

    SqlAlchemy 2.0 中文文档(五十五)

    问题在于,在两个具有共同基的加入继承模型之间进行连接时,不能形成适当的 SQL JOIN 而不对其中一侧应用别名;SQLAlchemy 将别名应用于连接的右侧。...### 关系 X 将列 Q 复制到列 P,与关系‘Y’冲突 此警告指的是在刷新时两个多个关系将写入相同列的情况,但 ORM 没有任何手段来协调这些关系。...这通常发生在对同一底层两个多个关系具有自定义relationship.primaryjoin条件以限制每种情况下相关项目的情况: class Parent(Base): __tablename...根据具体情况,解决方案可能是两个关系需要彼此引用,使用relationship.back_populates,或者一个或多个关系应该配置为relationship.viewonly以防止冲突的写入,有时配置是完全有意的...这通常发生在对同一基础两个多个关系中,这些关系包括限制每种情况中相关项的自定义relationship.primaryjoin条件: class Parent(Base): __tablename

    41310

    SQLAlchemy 定义关系

    关系数据库中表与之间一般存在三种关系:一对一、一对多、多对多。 关系数据库包含一个或多个相关,这些一起使用时会包含您需要的信息。...利用关系数据库可以使用最新状态的数据,高效、灵活地建立和管理数据,同时节省磁盘空间。 要从相关中检索数据并将其拷贝到当前,需要定义查找。...一对一本质上是两个之间的双向关系,要做到这一点只需要在一对多关系的基础上设置 relationship 方法的 uselist 参数为 false 即可。...由于一对一关系与一对多关系基本相同,这里不再做过多的描述,各位看官可以参照一对多关系来完成相关内容。 多对多关系 一个中的多个记录与另一个中的多个记录相关联时即产生多对多关系。...而我们常用的关系数据库往往不支持直接在两个之间进行多对多的联接,为了解决这个问题,就需要引入第三个,将多对多关系拆分为两个一对多的关系,我们称这个为联接

    68150

    SqlAlchemy 2.0 中文文档(一)

    其主要组件如下图所示,组件依赖关系组织成层次结构: 上面,SQLAlchemy 最重要的两个面向用户的部分是对象关系映射器(ORM)和核心(Core)。...使用对象设置元数据 当我们使用关系型数据库时,数据库中的基本数据保存结构,我们从中查询的结构称为。在 SQLAlchemy 中,数据库“”最终由一个名为Table的 Python 对象表示。...在接下来的章节中,我们将说明如何使用这些结构创建、操作和选择数据。 使用 Table 对象设置 MetaData 当我们使用关系型数据库时,数据库中我们查询的基本数据持有结构被称为。...当我们声明彼此相关的时,SQLAlchemy 使用这些外键约束声明的存在不仅使它们在向数据库发送 CREATE 语句时被发射,而且还有助于构建 SQL 表达式。...然后,在处理数据库元数据中,我们学习了如何使用MetaData和相关对象在 SQLAlchemy 中表示数据库、列和约束。在本节中,我们将结合上述两个概念来创建、选择和操作关系数据库中的数据。

    80910

    Flask入门第三天

    关系选项 backref:在关系的另一模型中添加反向引用,用于设置外键名称,在1查多的 primary join:明确指定两个模型之间使用的联结条件 uselist:如果为False,不使用列表,而使用标量值...order_by:指定关系中记录的排序方式 secondary:指定多对多关系关系的名字 secondary join:在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件   ...,一个角色可以有多个用户,一个用户只能属于一个角色。...在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。...Flask使用Blueprint让应用实现模块化,在Flask中,Blueprint具有如下属性: - 一个应用可以具有多个Blueprint - 可以将一个Blueprint注册到任何一个未使用的URL

    2.7K20

    SqlAlchemy 2.0 中文文档(六)

    mapped_column(Text, deferred=True) user: Mapped["User"] = relationship(back_populates="addresses") 上述声明式映射具有两个...mapped_column(Text, deferred=True) user: Mapped["User"] = relationship(back_populates="addresses") 上述声明式映射具有两个...下面是一个示例,其中结合了外键列和关系,以便两个类Foo和Bar都可以通过多对一引用到一个公共目标类: from sqlalchemy import ForeignKey from sqlalchemy.orm...下面是一个示例,将外键列和关系组合在一起,以便两个类Foo和Bar都可以配置为通过多对一引用一个共同的目标类: from sqlalchemy import ForeignKey from sqlalchemy.orm...在这里可以使用declared_attr装饰器来创建用户定义的排序例程,这些例程来自多个集合: from sqlalchemy.orm import declarative_mixin, declared_attr

    36410

    SqlAlchemy 2.0 中文文档(二十)

    直接使用它,可以为Session填充具有相同主键和源具有不同“标识”的对象的多个实例。...其中一个示例是使用翻译模式名称功能,该功能可以影响查询范围内的模式选择,从具有相同名称的中填充Session对象。...另请参阅 列加载选项 - 详细介绍了影响如何加载列和 SQL 表达式映射属性的映射和加载选项 关系加载技术 - 详细介绍了影响如何加载 relationship() 映射属性的关系和加载选项...直接使用它,可以将一个对象的多个实例填充到Session中,这些实例具有相同的主键和源,但具有不同的“标识”。...直接使用它,可以填充一个Session的多个对象实例,这些对象具有相同的主键和来源,但具有不同的“身份”。

    25110

    SqlAlchemy 2.0 中文文档(十六)

    在下面的示例中,我们可以使用 or_() 构造同时针对两个类创建条件: >>> from sqlalchemy import or_ >>> employee_poly = with_polymorphic...这两个多态实体被视为两个独立的,因此通常需要以某种方式相互连接,如下所示,在这里实体在 `company_id` 列上与彼此连接,并附加一些额外的限制条件针对 `Employee` / `Manager...## 单一继承映射的 SELECT 语句 单一继承设置 本节讨论单继承,描述在单继承中使用单个表表示层次结构中的多个类。 查看本节的 ORM 设置。...这两个多态实体被视为两个单独的,因此通常需要以某种方式彼此连接,如下例所示,其中实体在 `company_id` 列上与彼此连接,并附加一些针对 `Employee` / `Manager` 实体的额外限制条件...本节讨论单一继承,描述在单一继承中使用单个来表示层次结构中的多个类。

    26510

    Python Web - Flask笔记6

    一对一的关系: 在sqlalchemy中,如果想要将两个模型映射成一对一的关系,那么应该在父模型中,指定引用的时候,要传递一个uselist=False这个参数进去。...多对多的关系: 多对多的关系需要通过一张中间来绑定他们之间的关系。...先把两个需要做多对多的模型定义出来 使用Table定义一个中间,中间一般就是包含两个模型的外键字段就可以了,并且让他们两个来作为一个“复合主键”。...在两个需要做多对多的模型中随便选择一个模型,定义一个relationship属性,来绑定三者之间的关系,在使用relationship的时候,需要传入一个secondary=中间。...在定义模型的时候,可以不写__tablename__,那么flask_sqlalchemy会默认使用当前的模型的名字转换成小写来作为的名字,并且如果这个模型的名字使用了多个单词并且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行连接

    2K10
    领券