如何使用本指南: 本指南采用备忘单格式,包含自包含的命令行代码段 跳转到与您要完成的任务相关的任何部分 当您在本指南的命令中看到highlighted text时,请记住,此文本应引用您自己的数据库中的列...在MySQL和MariaDB中,使用以下语法执行此操作: USE database; 在PostgreSQL中,您必须使用以下命令选择所需的数据库: \connect database 创建表 以下命令结构使用名称创建一个新表...请注意,value应该是指定column的值和要查询的行: SELECT * FROM table WHERE column = value; 使用比较运算符 WHERE子句中的比较运算符定义应如何将指定列与值进行比较...如在本示例这样,如果每个两个表中存在具有相同名称和数据类型的列,JOIN子句会开始查询: SELECT table_1.column_1, table_2.column_2 FROM table_1 JOIN...INNER JOIN将返回两个表中具有匹配值的所有记录,但不会显示任何没有匹配值的记录。 通过使用外部 JOIN子句,可以从两个表中的一个表中返回所有记录,包括在另一个表中没有相应匹配的值。
PostgreSQL与标准SQL密切配合,尽管它还包括其他关系数据库系统中没有的一些功能。 准备 通常,本指南中提供的命令和概念可用于任何运行任何SQL数据库软件的基于Linux的操作系统。...使用我们的示例表,您可以使用此查询在您的朋友中找到平均最高分: SELECT AVG(best) FROM tourneys; avg ------- 252.8 (1 row) SUM用于查找给定列的总和...除了FROM和WHERE之外,最常用的查询子句之一是GROUP BY子句。它通常在您对一列执行聚合函数时使用,但与另一列中的匹配值相关。 例如,假设您想知道有多少朋友更喜欢您制作的三个主菜中的每一个。...这意味着它选择在两个表中具有匹配值的所有记录并将它们打印到结果集,而排除任何不匹配的记录。...; 它只需要从名称列中与Barbara中的name行找到wins列的值,并且子查询和外部查询返回的数据彼此独立。
/MariaDB 和 SQLite 方言,在反射外键约束时,目标列包含一个或两个表名或列名中的括号时。...如果两个同名列被映射到与列本身的显式名称不同的属性名下。...numeric和numeric_dollar paramstyles 假设目标后端能够以任何顺序接收数字参数,并将给定的参数值与语句匹配,基于将它们的位置(从 1 开始)与数字指示器进行匹配。...此外,作为relationship()的主参数给定的目标类名将始终优先于左手注释中给定的名称,以便仍然可以在注释中使用否则无法导入的名称,而且这些名称也不与类名匹配。...不幸的是,这破坏了第三方列类型,如 SQLModel 中没有实现此特殊方法的 UUID/GUID 类型,引发错误“无法将结果集中的哨兵值与参数集匹配”。
名称字段可以在构建时省略,并在与Table关联之前的任何时候应用。这是为了支持在declarative扩展中的方便使用。 type_ – 列的类型,使用一个继承自TypeEngine的实例来表示。...如果并且当此Column被指定为引用另一列时,使用ForeignKey和/或ForeignKeyConstraint,远程引用列的类型也将被复制到此列中,在解析外键与该远程Column对象相匹配的时刻。...可以在构造时省略名称字段,并在任何时候在列与Table关联之前应用。这是为了支持在declarative扩展中方便的使用。 type_ – 列的类型,使用一个子类化了TypeEngine的实例指示。...这两个互斥标志的目的是指定当指定与现有 Table 匹配的 Table 时应采取的操作,但指定了其他构造。...这两个互斥的标志的目的是指定当指定一个与现有Table匹配的Table时应采取的操作,但指定了额外的构造。
为了适应引用不可哈希结构(如字典、集合和列表)的数据类型,可以通过将可哈希结构分配给其名称与参数名称对应的属性来使这些对象“可缓存”。...类将扫描与名称模板匹配的方法,并在必要时装饰它们,以确保接受**kw参数。...请参阅 更改类型的编译 部分,自定义 SQL 构造和编译扩展 的一个子节,以获取其他示例。 增强现有类型 TypeDecorator 允许创建自定义类型,将绑定参数和结果处理行为添加到现有类型对象中。...为了适应引用不可哈希结构的数据类型,如字典、集合和列表的数据类型,可以通过将可哈希结构分配给名称与参数名称对应的属性来使这些对象“可缓存”。例如,接受查找值字典的数据类型可以将其发布为排序的元组系列。...类将扫描匹配名称模板的方法,并在必要时装饰它们,以确保接受**kw参数。
LIMIT 获取查询生成的行的子集。 FETCH 限制查询返回的行数。 IN 选择与值列表中的任何值匹配的数据。 BETWEEN 选择值范围内的数据。 LIKE 基于模式匹配过滤数据。...左连接 从一个表中选择行,这些行在其他表中可能有也可能没有对应的行。 自连接 通过将表与自身进行比较来将表与其自身连接。 完全外连接 使用完全连接查找一个表中在另一个表中没有匹配行的行。...交叉连接 生成两个或多个表中的行的笛卡尔积。 自然连接 根据连接表中的公共列名称,使用隐式连接条件连接两个或多个表。 第 4 节....重命名表 将表的名称更改为新名称。 添加列 向您展示如何向现有表添加一列或多列。 删除列 演示如何删除表的列。 更改列数据类型 向您展示如何更改列的数据。 重命名列 说明如何重命名表中的一列或多列。...hstore 向您介绍数据类型,它是存储在 PostgreSQL 中单个值中的一组键/值对。 JSON 说明如何使用 JSON 数据类型,并向您展示如何使用一些最重要的 JSON 运算符和函数。
另请参见 使用文本列表达式进行选择 当传递位置参数时,TextClause.columns() 将按位置匹配列,而不是按名称匹配 - 向后兼容性说明 对于 Core/ORM SQL 构造,基于位置的匹配比基于名称的匹配更可靠...TextClause.columns()将按位置匹配列,而不是按名称匹配 TextClause.columns()方法的新行为,该方法本身是最近在 0.9 系列中添加的,是,当列通过位置传递而没有任何额外的关键字参数时...#3630 在继承映射器上具有相同名称的关系不再发出警告 在继承情景中创建两个映射器时,在两者上放置具有相同名称的关系将发出警告:“关系’‘在映射器上取代了继承的映射器’'上的相同关系;这可能会在刷新时引起依赖问题...TextClause.columns()将按位置匹配列,而不是按名称匹配 TextClause.columns()方法的新行为,它本身是在 0.9 系列中最近添加的,是当列按位置传递而没有任何额外的关键字参数时...#2528 ### TextClause.columns() 将按位置匹配列,而不是按名称匹配 TextClause.columns() 方法的新行为,它本身是最近添加的 0.9 系列的一部分,是当列被以位置传递且没有任何额外的关键字参数时
可以被子类重写以在提取结果时提供自定义行为。该方法在查询执行时传递了语句对象和一组“行处理”函数;当给定一个结果行时,这些处理函数将返回单个属性值,然后可以将其调整为任何类型的返回数据结构。...在 1.4 版本中更改:is_not() 运算符在之前的版本中从 isnot() 重命名。 以前的名称仍然可用于向后兼容。...一些后端,如 PostgreSQL 和 MariaDB,可能会将标志作为模式的一部分来指定。在 PostgreSQL 中使用忽略大小写标志‘i’时,将使用忽略大小写的正则表达式匹配运算符~*或!...==运算符为非多对一比较提供了部分功能: 不支持与集合进行比较。请使用Comparator.contains()。 与标量一对多相比,将生成一个子句,比较父级中的目标列与给定目标。...与标量一对多相比,将生成一个在父项中比较目标列与给定目标的子句。 与标量多对多相比,关联表的别名也将被呈现,形成查询主体的一部分的自然连接。
“所有者”标识符对,这在表和组件反射操作以及在呈现模式名称的引号时必须将这两个符号分开时会被分开。...注意 @hybrid_property中的这种变化意味着,当向@hybrid_property添加 setter 和其他状态时,方法必须保留原始混合属性的名称,否则具有附加状态的新混合属性将以不匹配的名称存在于类中...这用于在IN表达式中,元素列表在语句执行时被渲染为单独的绑定参数,而不是在语句编译时。这允许将单个绑定参数名称链接到多个元素的 IN 表达式,并允许使用查询缓存与 IN 表达式一起使用。...“所有者”标识符对,这在表和组件反射操作以及在呈现模式名称的引用时必须将这两个符号分开时发生,以便分别引用这两个符号。...“所有者”标识符对,这在表和组件反射操作以及在呈现模式名称的引用时必须将这两个符号分开时发生,以便分别引用这两个符号。
运算符 名称 作用 示例 + 加法运算符 计算两个值或表达式的和 SELECT A+B - 减法运算符 计算两个值或表达式的差 SELECT A-B * 乘法运算符 计算两个值或表达式的乘积 SELECT...SELECT A DOM B 加减运算符: 一个整数类型的值对整数进行加法和减法操作,结果还是一个整数; 一个整数类型的值对浮点数进行加法和减法操作,结果是一个浮点数; 加法和减法的优先级相同,进行先加后减操作与进行先减后加操作的结果是一样的...但是在MySQL中+只表示数 值相加。如果遇到非数值类型,先尝试转成数值,如果转失败,就按0计算。...日期和时间函数 获取日期、时间 日期与时间戳的转换 获取月份、星期、星期数、天数等函数 日期的操作函数 EXTRACT(type FROM date)函数中type的取值与含义: 时间和秒钟转换的函数...计算日期和时间的函数 日期的格式化与解析 上述 非GET_FORMAT 函数中fmt参数常用的格式符: GET_FORMAT函数中date_type和format_type参数取值如下
当 SQLAlchemy 构造自动连接时,不能再假设“远程”侧的所有列都被别名化,而“本地”侧的所有列都没有被别名化 - account_id列在两侧都存在。...它还为现有类型铺平了道路,使其能够获取更多特定于这些类型的运算符,例如更多的字符串、整数和日期运算符。...当 SQLAlchemy 构造自动连接时,不再假设“远程”一侧的所有列都被别名化,并且“本地”一侧的所有列都没有被别名化 - account_id 列在两侧都存在。...当 SQLAlchemy 构建自动连接时,不能再假定“远程”一侧的所有列都被别名化,而“本地”一侧的所有列都没有被别名化 - account_id列在两侧都存在。...核心中的新运算符系统添加了一直缺失的一个钩子,即将新的和重写的运算符与类型关联起来。毕竟,真正驱动存在哪些操作的不是列、CAST 运算符或 SQL 函数,而是表达式的类型。
(去重) 我们平时在操作数据时,有可能出现一种情况,在一个表中有多个重复的记录,当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。...示例 逻辑运算符 AND | OR | NOT 逻辑运算符 序号 运算符和描述 1 AND 逻辑与运算符。如果两个操作数都非零,则条件为真。...value2:范围的结束值。 模式匹配 LIKE 模式匹配功能主要用于搜索,常用的就是LIKE LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。...示例 %是为了避免在两个单词之间填充其他字符导致结果出错 lower 是把 label字段都变成小写,以避免没有匹配上而遗漏 模式匹配 POSIX 正则表达式 ~ ORDER BY 在 PostgreSQL..., .. columnN] [ASC | DESC]; 您可以在 ORDER BY 中使用一列或者多列,但是必须保证要排序的列必须存在。
Enum 类型在 Python 中也提供了对字符串值进行读写操作期间的验证。从结果集中读取数据库中的值时,始终检查字符串值是否与可能值列表匹配,如果找不到匹配项,则引发 LookupError。...,而不需要进行逐行类型检查 当与 Python 的getitem访问器一起使用时,维度数量用于定义[]运算符应返回的类型,例如,对于具有两个维度的整数数组: >>> expr = table.c.column...支持 JSON null 与 SQL NULL 在处理 NULL 值时,JSON 类型建议使用两个特定的常量来区分一个计算为 SQL NULL 的列,例如,没有值,与 JSON 编码的字符串"null"...Enum 类型还提供了在 Python 中对字符串值进行读写操作时的验证。在结果集中从数据库中读取值时,始终会检查字符串值是否与可能值列表匹配,如果没有找到匹配项,则会引发 LookupError。...支持 JSON null 与 SQL NULL 处理 NULL 值时,JSON 类型建议使用两个特定的常量来区分一个评估为 SQL NULL 的列(例如,没有值),与 JSON 编码的字符串 "null
给定两个整数值进行“真除法”操作: expr = literal(5, Integer) / literal(10, Integer) 例如,在 PostgreSQL 上,SQL 除法运算符在针对整数时通常作为...给定两个整数值进行“地板除法”操作: expr = literal(5, Integer) // literal(10, Integer) 例如,在 MySQL 和 Oracle 上,SQL 除法运算符在针对整数时通常作为...与原始 C 代码相比,Cython 扩展更容易编写、维护和调试,在大多数情况下与 Python 代码是逐行等效的。...给定两个整数值进行“真除法”操作: expr = literal(5, Integer) / literal(10, Integer) 例如,在 PostgreSQL 上,SQL 除法运算符通常在对整数使用时作为...给定两个整数值进行“真除法”操作: expr = literal(5, Integer) / literal(10, Integer) PostgreSQL 上的 SQL 除法运算符通常在对整数进行操作时作为
“相等性”比较,还有一种称为 Select.filter_by() 的流行方法,它接受与列键或 ORM 属性名称匹配的关键字参数。...传递的文本**不会直接渲染**;而是在列子句中给定的表达式名称,并在上下文中呈现为该表达式名称,如果找不到匹配项,则会引发错误。...“相等性”比较,还有一种常用方法称为 Select.filter_by(),它接受与列键或 ORM 属性名称匹配的关键字参数。...传递的文本**不会直接呈现**;而是在上下文中以该表达式名称的形式呈现,并在没有找到匹配项时引发错误。这种形式还可以使用一元修饰符`asc()` 和 `desc()`。...传递的文本不会直接呈现;相反,在列子句中给定表达式的名称,并在上下文中呈现为该表达式名称,如果找不到匹配项,则会引发错误。
始终明确使用NVARCHAR2和NCLOB数据类型将继续使用NVARCHAR2和NCLOB,包括在 DDL 中以及在处理绑定参数时使用 cx_Oracle 的setinputsizes()。...相反采取的方法将额外的开销限制在较少常见的集合移除和批量替换操作上,线性扫描的观察开销是可以忽略的;在工作单元中已经使用了与关系绑定集合的线性扫描,以及在集合进行批量替换时。...然而,“selectin”加载仍然依赖于在父表和相关表之间渲染 JOIN,因为它需要行中的父主键值以匹配行。...如往常一样,明确使用NVARCHAR2和NCLOB数据类型将继续使用NVARCHAR2和NCLOB,包��在 DDL 中以及处理带有 cx_Oracle 的setinputsizes()的绑定参数时。...始终如此,在 DDL 中明确使用NVARCHAR2和NCLOB数据类型将继续使用NVARCHAR2和NCLOB,包括在处理绑定参数时使用 cx_Oracle 的setinputsizes()。
with_ordinality - 存在时,将 WITH ORDINALITY 子句添加到别名,并将给定的字符串名称添加为结果 TableValuedAlias 的 .c 集合中的列。...中,字符串连接更常见地使用 Python 的+运算符与字符串数据类型一起使用,这将呈现特定于后端的连接运算符,例如: >>> print(select(literal("a") + "b")) SELECT...with_ordinality – 当存在时,会将WITH ORDINALITY子句添加到别名中,并且给定的字符串名称将作为列添加到结果的TableValuedAlias的.c集合中。...通用类型 可以传递,并且应该与 Result 中看到的类型匹配。...中,使用 Python 的+运算符与字符串数据类型更常见,这将呈现特定于后端的连接运算符,例如: >>> print(select(literal("a") + "b")) SELECT :param
VALUES子句或查询的值都与显式或隐式的列列表从左到右。 如果要添加表中的所有列的值,可能不需要在SQL查询中指定列(次)名称。但要确保表中是在相同的顺序的列值的顺序。...,则返回行; LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行; RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行; FULL JOIN: 只要其中一个表中存在匹配,就返回行...UNION ALL运算符语句,则包括重复行的结果。使用UNION,每个SELECT选择的列数必须具有相同的,相同数目的列表达式相同的数据类型,并让它们在相同的顺序,但它们不必是相同的长度。...可以使用子查询的有SELECT,INSERT,UPDATE和DELETE语句,与运算符如=,,>=,<=,IN等一起使用。有几个子查询必须遵循的规则: 必须用括号括起来的子查询。...如果所有参数都是NULL那么返回NULL。它常用于在显示数据时用缺省值替换NULL。语法如下: COALESCE(value [, ...])
不幸的是,该函数更多地是设计为接收属性和 SQL 表达式,而不是字符串;当传递字符串时,这些字符串将直接传递到核心更新语句,而不解析这些名称在映射类上如何表示,这意味着名称必须与表列的名称完全匹配,而不是映射到类的属性的名称...虽然在创建表和索引时支持两种语法,但在存储时并没有任何区别。...不幸的是,该函数更多地设计为接收属性和 SQL 表达式,而不是字符串;当传递字符串时,这些字符串将直接传递到核心更新语句,而不解析这些名称在映射类上如何表示,这意味着名称必须与表列的名称完全匹配,而不是映射到类的属性的名称...在编译过程中,给定的字符串参数会与列子句中的条目进行主动匹配,因此上述语句将按我们的期望产生,没有警告(尽管请注意,"name"表达式已解析为users.name!)...在编译过程中,给定的字符串参数会被主动匹配到列子句中的条目,因此上述语句会按我们的期望产生结果,没有警告(尽管请注意"name"表达式已解析为users.name!)
类型系统更改 新架构 类型系统在幕后完全重建,以实现两个目标: 将绑定参数和结果行值的处理分开,通常是 DBAPI 的要求,与类型本身的 SQL 规范分开,这是与总体方言重构一致的,将数据库 SQL...SQLite 上的 DateTime 类型现在默认使用更严格的正则表达式来匹配数据库中的字符串。如果你使用存储在传统格式中的数据,请使用新的 “regexp” 参数。...类型系统更改 新架构 在幕后,类型系统已经完全重构,以实现两个目标: 将绑定参数和结果行值的处理分开,通常是 DBAPI 的要求,与类型本身的 SQL 规范分开,这是数据库的要求。...新架构 类型系统已在幕后完全重做,以实现两个目标: 将绑定参数和结果行值的处理分开,通常是 DBAPI 的要求,与类型本身的 SQL 规范分开,这是数据库的要求。...SQLite 上的 DateTime 类型现在默认使用更严格的正则表达式来匹配来自数据库的字符串。如果使用存储在传统格式中的数据,则使用新的“regexp”参数。
领取专属 10元无门槛券
手把手带您无忧上云