__name 字段,指示数据库列的名称,因为声明性过程将使用给定构造函数的属性名称,并将其分配为列的名称(在上面的示例中,这指的是 id、name、fullname、nickname 的名称)。...__name,在这种情况下,生成的 Column 将在 SQL 和 DDL 语句中使用给定的名称,而 User 映射类将继续允许使用给定的属性名称访问属性,而不管列本身的名称如何(更多内容请参阅 明确命名声明式映射列...如果使用了这些类型注释,则必须存在于称为Mapped的特殊 SQLAlchemy 类型中,该类型然后表示其中的特定 Python 类型。...__name字段,该字段指示数据库列的名称,因为声明性过程将使用赋予构造的属性名称,并将其分配为列的名称(在上面的示例中,这指的是名称id、name、fullname、nickname)。...NULL, but can be None in Python data: Mapped[Optional[str]] = mapped_column(nullable=False) 同样,一个非空属性写入到一个数据库列
命令式形式 一对多 使用集合、列表或其他集合类型进行一对多 为一对多配置删除行为 多对一 可空多对一 一对一 为非注释配置设置 uselist=False 多对多...;因此,相关类必须直接在 relationship() 构造中指定,可以作为类本身、类的字符串名称或返回目标类引用的可调用函数。...;因此,相关类必须直接在relationship()构造中指定,可以是类本身、类的字符串名称或返回目标类引用的可调用函数。...;因此,相关类必须直接在relationship()构造中指定,可以是类本身、类的字符串名称,或者返回目标类引用的可调用函数。...;因此,相关类必须直接在relationship()构造中指定,可以是类本身、类的字符串名称,或者返回目标类引用的可调用函数。
在使用主机名连接时,还必须在 URL 的查询参数中指定驱动程序名称。...使用非整数数值类型的 IDENTITY SQL Server 还允许将IDENTITY与NUMERIC列一起使用。...在使用主机名连接时,驱动程序名称也必须在 URL 的查询参数中指定。...使用主机名连接时,还必须在 URL 的查询参数中指定驱动程序名称。...当使用主机名连接时,驱动程序名称也必须在 URL 的查询参数中指定。
但是,与直接使用UpdateBase.returning()时不同,列的顺序是未定义的,因此只能使用名称或Row._mapping键来定位它们;它们不能可靠地以位置为目标。...当针对 DELETE 语句使用时,默认情况下不包含任何列在 RETURNING 中,而必须显式指定,因为在 DELETE 语句进行时通常不会更改值的列。...通常由 GenericFunction 调用,但也可单独使用,以便将非 Function 构造与func访问器关联起来(即 CAST,EXTRACT)。...class sqlalchemy.sql.functions.aggregate_strings 实现一个通用的字符串聚合函数。 此函数将非空值连接成字符串,并用分隔符分隔值。...class sqlalchemy.sql.functions.aggregate_strings 实现一个通用的字符串聚合函数。 此函数将非空值连接为一个字符串,并用分隔符分隔值。
需要注意的是,在构建普通声明性映射的时候,Table 必须是完全反映的,或者至少有一个主键列,这意味着在类声明时必须可用 Engine。...这些类型默认始终被认为是Optional,即使对于主键和非空列也是如此。...这些类型默认情况下总是被认为是 Optional 的,即使对于主键和非空列也是如此。...类型默认始终被视为可选,即使对于主键和非空列也是如此。...如果集合为空,则引发 KeyError。 method remove(elem: _T) → None 从集合中删除一个元素;它必须是成员。 如果元素不是成员,则引发 KeyError。
,因为这样的列必须引用源自其他地方的值。...这表明对 SQLAlchemy 而言,新生成的值将在更新后可用。这种构造实际上并不在数据库内部实现任何生成函数,而是必须单独指定。...可以在构造时省略名称字段,并在任何时候在列与Table关联之前应用。这是为了支持在declarative扩展中方便的使用。 type_ – 列的类型,使用一个子类化了TypeEngine的实例指示。...这告诉 SQLAlchemy 在更新后将可用新生成的值。此构造实际上不在数据库中实现任何生成函数,而必须单独指定。...要向现有的关系数据库表添加约束,必须使用 SQL ALTER 命令。SQLAlchemy 还提供了当调用时可以生成此 SQL 的AddConstraint构造。
将属性名称传递给组合类型 我们可以使用更多的注释形式编写上面相同的示例,其中我们有选项将属性名称传递给 composite(),而不是完整的列构造: from sqlalchemy.orm import...我们还将实现__composite_values__()方法,这是一个固定名称,被composite()构造函数所识别(在使用传统非数据类中介绍过),它指示了一种接收对象作为列值的标准方式,这种情况下将取代通常的数据类方法论...将属性名称传递给复合对象 我们可以使用更多带有注释形式编写上面相同的示例,其中我们可以选择将属性名称传递给 composite() 而不是完整的列构造: from sqlalchemy.orm import...将属性名称传递给复合对象 我们可以使用更多带有注释形式编写上面相同的示例,其中我们可以选择将属性名称传递给 composite() 而不是完整的列构造: from sqlalchemy.orm import...我们还将实现__composite_values__()方法,这是由composite()构造(在使用传统非数据类中介绍)中识别的固定名称,表示以列值的扁平元组形式接收对象的标准方式,在这种情况下将取代通常的数据类导向方法
Parent()对象而不传递children时,上述映射将为Parent.children生成一个空列表,类似地,当构造新的Child()对象而不传递parent时,将为Child.parent生成一个...使用非映射数据类字段 当使用声明式数据类时,类上也可以使用非映射字段,这些字段将成为数据类构造过程的一部分,但不会被映射。任何不使用 Mapped 的字段都将被映射过程忽略。...使用非映射数据类字段 当使用声明性数据类时,类上也可以使用非映射字段,这些字段将成为数据类构造过程的一部分,但不会被映射。任何未使用Mapped的字段都将被映射过程忽略。...Parent()对象时为Parent.children生成一个空列表,当构造新的Child()对象时,如果不传递parent,则Child.parent将生成一个None值。...使用非映射数据类字段 当使用声明性数据类时,也可以在类上使用非映射字段,这些字段将成为数据类构造过程的一部分,但不会被映射。任何不使用Mapped的字段都将被映射过程忽略。
“非主要”映射器的概念已经存在多个 SQLAlchemy 版本,但从 1.3 版本开始,此功能已被弃用。其中一个非主要映射器有用的情况是构建与备用可选择类之间的关系时。...“非主要”映射器的概念在许多版本的 SQLAlchemy 中一直存在,但自版本 1.3 起,此功能已不建议使用。唯一需要非主要映射器的情况是在构造与另一个可选择的类的关系时。...这是一个可选的仅位置参数,如果存在,必须是传递的第一个位置参数。如果省略,则将使用 mapped_column() 映射到的属性名称作为 SQL 列名。...将此构造添加到声明式映射类的指南与insert_sentinel() 构造的相同;数据库表本身也需要具有此名称的列。...非主映射器的功能现在更适合使用AliasedClass构造,1.3 中也可以作为relationship()的目标使用。
需要注意的是,为了使用外键约束,必须先创建被参考表 teacher 中的 id 列,并将其设置为主键。...因为外键约束的作用是确保参考表中的某一列值必须存在于当前表的某一列中,所以参考表中的该列必须设置为唯一的且非空。...UNIQUE:唯一性约束,用于限制列中的数据不能重复。 NOT NULL:非空约束,用于限制列中的数据不能为空。 CHECK:检查约束,用于限制列中的数据必须满足指定的条件。...主键所包含的列必须满足数据每一行都具有唯一性和非空性的条件,主键通常用于对表进行数据的查询、更新和删除操作。在表中,主键是通过具体的列值来定义的,而不是定义在表上的某个独立的约束。...唯一约束:可以确保表中某一列的值是唯一的,也可避免特定列出现空值。 非空约束:可以确保表中的某一列不为空。 检查约束:可以定义额外的规则来确保某一列或多个列的数据值符合规定。
SQLite 支持一个名为 ON CONFLICT 的非标准 DDL 子句,可应用于主键、唯一、检查和非空约束。...NULL, data INTEGER, PRIMARY KEY (id), UNIQUE (data) ON CONFLICT IGNORE ) 要应用 FAIL 算法以满足非空约束...“INTEGER PRIMARY KEY”来明确创建的非复合主键列。...然而,无论隐式还是显式启用了 SQLite 的自动增量功能,列类型的名称都必须正好是字符串 "INTEGER"。...SQLite 支持一个名为 ON CONFLICT 的非标准 DDL 子句,可应用于主键、唯一、检查和非空约束。
这些名称通常是 SQL 语句分配给每行中的列的名称。...这些名称通常是 SQL 语句为每行的列分配的名称。...根据Optional[]类型注释(或其等效形式, | None或Union[, None])的存在,可以将列声明为“可空”或“非空”。...可以根据存在Optional[]类型注释(或其等效项 | None或Union[, None])来声明列是否“可空”或“非空”。...根据存在的Optional[]类型注释(或其等效形式 | None或Union[, None]),可以将列声明为“可为空”或“非空”。
(请注意,子查询通常应该使用 Select.alias() 方法创建,因为许多平台要求嵌套的 SELECT 语句必须被命名)。...在现代用法中,此字典通常为空。...在现代用法中,该字典通常为空。 visitors – 访问函数的字典。...它也可以由 SQLAlchemy 使用称为 反射 的过程生成,这意味着您从一个单一对象(例如 Table)开始,为其指定一个名称,然后指示 SQLAlchemy 从特定的引擎源加载与该名称相关的所有附加信息...使用 MetaData 描述数据库 访问表和列 创建和删除数据库表 通过迁移修改数据库对象 指定模式名称 使用 MetaData 指定默认模式名称 应用动态模式命名约定
空值性取决于是否使用了Optional[]类型修饰符。...在上面的示例中,User.id和Address.id列被标记为主键。 综合考虑,字符串表名称以及列声明列表的组合在 SQLAlchemy 中被称为 table metadata。...每个属性的名称对应于要成为数据库表的列。每个列的数据类型首先取自与每个Mapped注释相关联的 Python 数据类型;对于 INTEGER 使用 int,对于 VARCHAR 使用 str 等。...声明性表配置 使用声明性表的显式模式名称 为声明式映射的列设置加载和持久化选项 显式命名声明式映射列 将额外列添加到现有的声明式映射类 使用命令式表进行声明式(即混合声明式...,然后传递给复合体 直接映射列,将属性名称传递给复合体 命令映射和命令表 使用传统非数据类 跟踪复合体上的原位变化 重新定义复合体的比较操作 嵌套复合体 复合体
其他类型的属性包括使用 column_property() 构造定义的 SQL 表达式,以及使用 composite() 构造进行多列映射。...然而我们将这一列重新映射到同一属性名称下,以便由deferred() 构造进行控制。...在声明式表和混合表映射中,当我们定义一个ForeignKey 构造时,我们总是使用表名称而不是映射的类名称来命名目标表。...当我们定义relationship()构造时,由于这些构造在两个映射类之间创建了一个链接,其中一个必然在另一个之前被定义,我们可以使用其字符串名称引用远程类。...当我们定义 relationship() 构造时,由于这些构造在两个映射类之间创建了链接,其中一个必然在另一个之前被定义,我们可以使用其字符串名称引用远程类。
如果ForeignKeyConstraint 报告对于一组非空列设置了 ForeignKeyConstraint.ondelete 为 CASCADE,或者对于可为空列设置了 SET NULL,则在关系关键字参数集合中将选项...可以使用在 Naming Declarative Mapped Columns Explicitly 中描述的技术修改映射的列,通过将列显式地分配给一个新名称: Base = automap_base(...如果ForeignKeyConstraint报告对于一组非空列设置了CASCADE或对于可为空列设置了SET NULL的ForeignKeyConstraint.ondelete,则将在关系关键字参数集合中将选项...可以使用在 Naming Declarative Mapped Columns Explicitly 中描述的技术来修改映射的列,通过将列显式地分配给新名称: Base = automap_base()...可以使用在 显式命名声明性映射列 中描述的技术修改映射的列,通过将列显式分配给一个新名称: Base = automap_base() class TableB(Base): __tablename
ORM 构造,其他部分未涵盖,列在此处。...使用 Operators.bool_op() 的一个关键优势是,在使用列构造时,返回的表达式的“布尔”特性将存在于 PEP 484 目的上。...版本 1.2 中新增:“expanding” 绑定参数 如果传递了一个空列表,则渲染一个特殊的“空列表”表达式,该表达式特定于正在使用的数据库。...==运算符为非多对一比较提供了部分功能: 不支持与集合进行比较。请使用Comparator.contains()。 与标量一对多相比,将生成一个子句,比较父级中的目标列与给定目标。...这对于超出简单 AND 比较的查询不起作用,例如使用 OR 的查询。请使用显式连接、外连接或Comparator.has()进行更全面的非多对一标量成员测试。
只需要这些列 行为 象主键一样,例如,作为行的唯一且非空的标识符。...映射的类需要为每个要存储独立值的属性明确指定名称;当两列具有相同的名称并且没有消歧时,它们就属于同一属性,其效果是将一列的值复制到另一列,根据哪一列首先分配给属性。...当出现警告或异常时,可以通过将列分配给名称不同的属性来解决问题,或者如果希望将它们组合在一起,则使用column_property()使其明确。...我收到了一个关于“隐式组合列 X 在属性 Y 下”的警告或错误 这种情况指的是映射包含两个列,这两个列由于它们的名称而被映射到同一属性名称下,但没有迹象表明这是有意的。...映射类需要为每个要存储独立值的属性指定明确的名称;当两个列具有相同的名称并且没有消歧义时,它们就会落入同一个属性下,效果是从一个列中的值被复制到另一个列中,取决于哪个列首先分配给属性。
ReflectedComputed 表示计算列的反射元素,对应于Computed构造。...参数: view_name – 视图的名称。 schema – 可选,从非默认模式检索名称。要进行特殊引用,请使用quoted_name。...ReflectedComputed 表示计算列的反射元素,对应于Computed构造。...class sqlalchemy.engine.interfaces.ReflectedComputed 表示计算列的反射元素,对应于Computed构造。...表示对应于 Identity 构造的反映的 IDENTITY 结构的列。
逻辑已更新为扫描所有给定表达式,以便使用第一个非空类型,并始终确保存在类型。感谢 David Evans 提交的拉取请求。...SELECT 语句中使用的“非匿名”标签作为 SQL 表达式元素的标签;主要示例是可能作为列类型的一部分发出的 SQL 函数,其中标签名称默认应与列名称匹配。...逻辑已更新为扫描所有给定表达式,以便使用第一个非空类型,并始终确保存在类型。拉取请求由 David Evans 提供。...逻辑已更新以扫描所有给定表达式,以使用第一个非空类型,并始终确保存在类型。感谢 David Evans 提交的拉取请求。...为了解决这个问题,当检测到 “给出 RETURNING 时没有描述” 的特定情况时,会生成一个带有正确游标描述的“空结果”,并在非工作游标的位置使用它。
领取专属 10元无门槛券
手把手带您无忧上云