SqlAlchemy 2.0 中文文档(七十)(5)

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: SqlAlchemy 2.0 中文文档(七十)

SqlAlchemy 2.0 中文文档(七十)(4)https://developer.aliyun.com/article/1560940


0.3.4

发布日期: 2007 年 1 月 23 日 星期二

一般

  • [一般]
    全局的 “保险”->“确保” 更改。在美国英语中,“保险”实际上与“确保”在很大程度上是可以互换的(字典上是这样说的),所以我不完全是文盲,但是“确保”是非歧义的,绝对是次优的。

orm

  • [orm]
    在打开"一罐蠕虫"的第一个孔的时候: 说  query.select_by(somerelationname=someinstance) 将会创建由 “somerelationname”  的映射器表示的主键列与 “someinstance” 中实际主键的连接。
  • [orm]
    重新设计了关系如何与 “多态” 映射器交互,即具有 select_table 和多态标志的映射器。更好地确定适当的连接条件,与用户定义的连接条件的交互,以及支持自引用多态映射器。
  • [orm]
    关于多态映射关系,当编译关系时进行了一些更深入的错误检查,以检测在关系的两侧都具有外键引用的情况下的模糊“primaryjoin”。还加强了用于定位“关系方向”的条件,将关系的“外键”与“primaryjoin”关联起来
  • [orm]
    对“具体”继承映射概念稍作改进,尽管该概念尚未完全明确(添加测试用例以支持在多态基础上的具体映射)。
  • [orm]
    修复了在 synonym()上的“proxy=True”行为
  • [orm]
    修复了删除孤儿基本上无法与多对多关系一起工作的错误,反向引用通常隐藏了症状
    参考:#427
  • [orm]
    在映射器编译步骤中添加了互斥锁。我一直不愿意在  SA  中添加任何线程内容,但这是真正需要的一个地方,因为映射器通常是“全局”的,虽然它们的状态在正常操作期间不会改变,但初始编译步骤会显著修改内部状态,并且这一步通常不会发生在模块级别的初始化时间(除非您调用  compile()),而是在第一次请求时
  • [orm]
    实际实现了“session.merge()”的基本概念。需要更多测试。
  • [orm]
    添加了“compile_mappers()”函数作为编译所有映射器的快捷方式
  • [orm]
    修复了 MapperExtension create_instance,以便 entity_name 正确关联到新实例
  • [orm]
    ORM 对象实例化速度提升,行的急加载
  • [orm]
    发送到“cascade”字符串的无效选项将引发异常
    参考:#406
  • [orm]
    修复了映射器刷新/过期中的错误,急加载器未正确重新填充项目列表
    参考:#407
  • [orm]
    修复了 post_update 以确保即使在非插入/删除场景下也更新行
    参考:#413
  • [orm]
    如果您尝试修改实体的主键值然后刷新它,将添加错误消息
    参考:#412

sql

  • [sql]
    添加了“fetchmany()”支持到 ResultProxy
  • [sql]
    添加了对列“key”属性在 row[]/row.中可用的支持
  • [sql]
    将“BooleanExpression”更改为从“BinaryExpression”继承,以便布尔表达式也可以遵循列子句行为(例如 label()等)。
  • [sql]
    从 func.调用中修剪尾随下划线,例如 func.if_()
  • [sql]
    修复了当通过单独调用 append_column()构建选择语句的列列表时,子查询的相关性;这修复了 ORM 错误,即嵌套的选择语句未与 Query 对象生成的主选择相关联。
  • [sql]
    另一个修复子查询相关性的方法,以便仅当子查询只有一个 FROM 元素时相关联该单个元素,因为查询中至少需要一个 FROM 元素。
  • [sql]
    默认���“timezone”设置现在为 False。这对应于 Python 的 datetime 行为以及 Postgres 的 timestamp/time 类型(目前是唯一有时区敏感的方言)
    参考:#414
  • [sql]
    “op()”函数现在被视为“操作”,而不是“比较”。区别在于,操作产生一个 BinaryExpression,可以进行进一步的操作,而比较产生更严格的 BooleanExpression
  • [sql]
    尝试将反射的主键列重新定义为非主键会引发错误
  • [sql]
    类型系统略有修改,以支持可以被方言覆盖的 TypeDecorators(好吧,这不太清楚,它允许下面的 mssql 调整成为可能)

extensions

  • [extensions]
    在 assign_mapper 中添加了“validate=False”参数,如果为 True,则确保只有映射的属性被命名
    参考:#426
  • [extensions]
    assign_mapper 添加了“options”、“instances”函数(即 MyClass.instances())

mysql

  • [mysql]
    mysql 在 SHOW CREATE TABLE 期间使用的外键引号类型不一致,反射已更新以适应所有三种样式
    参考:#420
  • [mysql]
    mysql 表创建选项现在可以通用传递,即 Table(…, mysql_engine=’InnoDB’, mysql_collate=”latin1_german2_ci”, mysql_auto_increment=”5”, mysql_…), 有助于
    参考:#418

mssql

  • [mssql]
    添加了一个 NVarchar 类型(产生 NVARCHAR),还有一个提供 Unicode 翻译的 MSUnicode,无论方言 convert_unicode 设置如何。

oracle

  • [oracle]
    轻微支持二进制,但仍需弄清如何插入相当大的值(超过 4K)。需要将 auto_setinputsizes=True 发送到 create_engine(),行必须逐个完全获取,等等。

杂项

  • [postgres]
    修复对表的初始 checkfirst 以考虑当前模式
    参考:#424
  • [postgres]
    postgres   有一个可选的“server_side_cursors=True”标志,将利用服务器端游标。这些适用于仅获取部分结果并且必须处理非常大的无界结果集。虽然我们希望这成为默认行为,但不同的环境似乎有不同的结果,原因尚未被分离,因此我们目前将该功能默认关闭。使用了最近在  psycopg 邮件列表上发现的一个显然未记录的 psycopg2 行为。
  • [postgres]
    为 postgres 表添加了“BIGSERIAL”支持,具有 PGBigInteger/autoincrement
  • [postgres]
    修复了 postgres 反射以更好处理存在模式名称时的情况;感谢 jason (at) ncsmags.com
    参考:#402
  • [firebird]
    约束创建顺序将主键放在所有其他约束之前;对于 Firebird 是必需的,对于其他数据库也不是坏主意
    参考:#408
  • [firebird]
    修复了 Firebird 自动加载多字段外键的问题
    参考:#409
  • [firebird]
    Firebird NUMERIC 类型正确处理没有精度的类型
    参考:#409

一般

  • [general]
    全局“insure”->“ensure”更改。在美国英语中,“insure”实际上与“ensure”在很大程度上是可以互换的(字典上是这么说的),所以我并不是完全文盲,但“ensure”明显更好,因为它是不含糊的。

orm

  • [orm]
    在罐头中开了第一个洞:说 query.select_by(somerelationname=someinstance) 将创建“somerelationname”映射器表示的主键列与“someinstance”实际主键之间的连接。
  • [orm]
    重新设计了关系与“多态”映射器的交互方式,即具有 select_table 和多态标志的映射器。更好地确定适当的连接条件,与用户定义的连接条件的交互,以及支持自引用多态映射器。
  • [orm]
    在编译关系时,与多态映射关系相关,在检测关系时进行了更深入的错误检查,以检测在关系的两侧都在主连接条件中具有外键引用的情况下的模棱两可的“primaryjoin”。还加强了用于定位“关系方向”的条件,将关系的“外键”与“primaryjoin”关联起来。
  • [orm]
    对“具体”继承映射概念进行了一点改进,尽管该概念尚未完全阐明(添加了支持在多态基础上使用具体映射器的测试用例)。
  • [orm]
    修复了在 synonym() 上的“proxy=True”行为
  • [orm]
    修复了删除孤立基本上无法与多对多关系一起工作的错误,反向引用通常隐藏了症状
    参考:#427
  • [orm]
    在映射器编译步骤中添加了互斥锁。我一直不愿意在  SA  中添加任何线程相关的东西,但这是真正需要的地方,因为映射器通常是“全局”的,虽然它们的状态在正常操作期间不会改变,但初始编译步骤会显著修改内部状态,并且这一步通常不会在模块级别初始化时发生(除非调���  compile()),而是在第一次请求时发生
  • [orm]
    实际实现了“session.merge()”的基本思想。需要更多测试。
  • [orm]
    添加了“compile_mappers()”函数作为编译所有映射器的快捷方式
  • [orm]
    修复了 MapperExtension create_instance,以便实体名称正确地与新实例关联
  • [orm]
    增加了 ORM 对象实例化、行的急切加载的速度优化
  • [orm]
    发送给 ‘cascade’ 字符串的无效选项将引发异常
    参考:#406
  • [orm]
    修复了在 mapper 刷新/过期中的错误,因此急切加载器没有正确地重新填充项目列表
    参考:#407
  • [orm]
    修复了 post_update 以确保即使对于非插入/删除场景,行也会被更新
    参考:#413
  • [orm]
    如果您实际尝试修改实体上的主键值,然后刷新它,将添加错误消息
    参考:#412

sql

  • [sql]
    向 ResultProxy 添加了“fetchmany()”支持
  • [sql]
    添加了对列“key”属性可在 row[]/row. 中使用的支持
  • [sql]
    将“BooleanExpression”更改为从“BinaryExpression”子类化,以便布尔表达式也可以遵循列子句行为(即 label() 等)。
  • [sql]
    func. 调用中的尾部下划线会被修剪掉,例如 func.if_()
  • [sql]
    修复了当选择语句的列列表是使用对 append_column() 的单独调用构造时子查询相关性的问题;这修复了一个 ORM 错误,即嵌套的 select 语句没有与 Query 对象生成的主要 select 相关联。
  • [sql]
    修复子查询相关性的另一个方法,以便只有一个 FROM 元素的子查询不会与该单个元素相关联,因为查询中至少需要一个 FROM 元素。
  • [sql]
    默认的“timezone”设置现在为 False。这与 Python 的 datetime 行为以及 Postgres 的 timestamp/time 类型相对应(目前唯一对时区敏感的方言)
    参考:#414
  • [sql]
    “op()” 函数现在被视为一个“操作”,而不是一个“比较”。区别在于,操作会产生一个二进制表达式,而后续操作可以在其中进行,而比较会产生更严格的布尔表达式。
  • [sql]
    试图将反射的主键列重新定义为非主键会引发错误
  • [sql]
    类型系统略有修改以支持可以被方言覆盖的 TypeDecorators(好吧,这不是很清楚,它允许下面的 mssql 调整成为可能)

扩展

  • [extensions]
    对 assign_mapper 添加了“validate=False”参数,如果为 True,则会确保仅命名了映射的属性
    参考:#426
  • [extensions]
    assign_mapper 添加了“options”、“instances”函数(即 MyClass.instances())

mysql

  • [mysql]
    mysql 在 SHOW CREATE TABLE 期间使用的引号类型不一致,反射已更新以适应所有三种风格。
    参考:#420
  • [mysql]
    mysql 表创建选项现在可以通用传递,即 Table(…, mysql_engine=’InnoDB’, mysql_collate=”latin1_german2_ci”, mysql_auto_increment=”5”, mysql_…), 有助于
    参考:#418

mssql

  • [mssql]
    添加了一个 NVarchar 类型(生成 NVARCHAR),还有一个 MSUnicode,为 NVarchar 提供 Unicode-翻译,无论方言 convert_unicode 设置如何。

oracle

  • [oracle]
    轻微 支持二进制,但仍需找出如何插入相当大的值(超过 4K)。需要将 auto_setinputsizes=True 发送到 create_engine(),行必须逐个完全获取,等等。

杂项

  • [postgres]
    修复了对表的初始 checkfirst 考虑当前模式的问题
    参考:#424
  • [postgres]
    postgres  有一个可选的 “server_side_cursors=True”  标志,将利用服务器端游标。这些适用于仅获取部分结果并且必要用于处理非常大的无界结果集。虽然我们希望这成为默认行为,但不同的环境似乎有不同的结果,原因尚未被分离,因此我们目前将该功能默认关闭。使用了最近在  psycopg 邮件列表上发现的一个显然未记录的 psycopg2 行为。
  • [postgres]
    添加了对带有 PGBigInteger/autoincrement 的 postgres 表的 “BIGSERIAL” 支持
  • [postgres]
    修复了对包含模式名称的 postgres 反射的处理方式;感谢 jason (at) ncsmags.com
    参考:#402
  • [firebird]
    约束创建的顺序将主键放在所有其他约束之前;对于 firebird 是必需的,对于其他数据库也是个好主意
    参考:#408
  • [firebird]
    Firebird 修复了自动加载多字段外键
    参考:#409
  • [firebird]
    Firebird NUMERIC 类型正确处理没有精度的类型
    参考:#409

0.3.3

发布日期:2006 年 12 月 15 日 星期五

  • [no_tags]
    修复了基于字符串的 FROM 子句,即 select(…, from_obj=[“sometext”])
  • [no_tags]
    修复了 passive_deletes 标志,lazy=None(noload)标志
  • [no_tags]
    添加了处理大型集合的示例/文档
  • [no_tags]
    在 sqlalchemy 命名空间中添加了 object_session() 方法
  • [no_tags]
    修复了 QueuePool bug,使其更好地重新连接到无法访问的数据库(感谢 Sébastien Lelong),还修复了 dispose() 方法
  • [no_tags]
    修复了使 MySQL rowcount 正常工作的补丁!
    参考:#396
  • [no_tags]
    修复了 MySQL 捕获 2006/2014 错误以正确重新引发 OperationalError 异常

0.3.2

发布日期:2006 年 12 月 10 日 星期日

  • [no_tags]
    修复了重大的连接池错误。修复了 MySQL 不同步错误,还将防止所有数据库中意外回滚事务
    参考资料:#387
  • [no_tags]
    与 0.3.1 相比的主要速度增强,将速度提高到 0.2.8 的水平
  • [no_tags]
    使得数十个耗时生成日志消息的调试日志调用条件化
  • [no_tags]
    修复了级联规则中的错误,导致整个对象图可能在保存/更新级联时不必要地级联
  • [no_tags]
    属性模块中的各种加速
  • [no_tags]
    会话中的身份映射默认情况下不再是弱引用。要使其成为弱引用,请使用 create_session(weak_identity_map=True) 修复。
    参考资料:#388
  • [no_tags]
    MySQL 检测到错误 2006(服务器已断开连接)和 2014(命令不同步),并在发生错误的连接上使其无效。
  • [no_tags]
    MySQL 布尔类型修复:
    参考资料:#307
  • [no_tags]
    postgres 反射修复:
    参考资料:#349, #382
  • [no_tags]
    添加了 EXCEPT、INTERSECT、EXCEPT ALL、INTERSECT ALL 的关键字
    参考资料:#247
  • [no_tags]
    assignmapper 扩展中的 assign_mapper 返回创建的映射器
    参考资料:#2110
  • [no_tags]
    向 Select 类添加了 label() 函数,当使用 scalar=True 创建标量子查询时,例如“select x, y, (select max(foo) from table) AS foomax from table”。
  • [no_tags]
    向 ForeignKey 添加了 onupdate 和 ondelete 关键字参数;如果存在,则传播到底层的 ForeignKeyConstraint。(但是不要在另一个方向上传播)
  • [no_tags]
    修复了 session.update() 以保留传入对象的“脏”状态
  • [no_tags]
    不再通过 in_() 函数向 IN 发送一个可选的“union”多选;现在只允许一个可选项到 in_() 函数(如果需要 union,请自行创建 union)
  • [no_tags]
    改进了通过 cascade=”none” 等禁用保存-更新级联的支持。
  • [no_tags]
    向  relation()  添加了“remote_side”参数,仅用于自引用的映射,以强制父/子关系的方向。替换了“foreignkey”参数用于“切换”方向的用法。“foreignkey”参数已被弃用,将最终由专用于映射器上的  ForeignKey 规范的参数替换。

0.3.1

发布日期:2006 年 11 月 13 日(星期一)

orm

  • [orm]
    “删除”级联将加载所有子对象,如果它们尚未加载。这可以通过在 relation() 上设置 passive_deletes=True 来关闭(即旧行为)。
  • [orm]
    调整了重写的急切查询生成,以不在循环急切加载的关系(例如反向引用)上失败
  • [orm]
    修复了一个 bug,即 eagerload()(或 lazyload())选项未正确指示查询是否在生成 LIMIT 查询时使用“嵌套”。
  • [ORM]
    修复了刷新时循环依赖排序中的 bug;如果对象 A 包含一个循环的多对一关系到对象 B,并且对象 B 刚刚附加到对象 A,对象 B 本身没有改变,那么 B 的主键属性与 A 的外键属性的多对一同步不会发生。
    参考:#360
  • [ORM]
    为 query.count 实现了 from_obj 参数,改进了 selectresults 上的 count 函数
    参考:#325
  • [ORM]
    在 ORM 关系的“级联”步骤中添加了一���断言,以检查附加到父对象的对象类是否合适(即如果 A.items 存储 B 对象,则如果向 A.items 附加 C,则引发错误)
  • [ORM]
    新扩展 sqlalchemy.ext.associationproxy,提供透明的“关联对象”映射。新示例 examples/association/proxied_association.py 进行了说明。
  • [ORM]
    改进了单表继承以加载目标类下面的完整层次结构
  • [ORM]
    修复了拓扑排序中一个细微条件的问题,其中一个节点可能会出现两次,用于
    参考:#362
  • [ORM]
    对拓扑排序进行了额外的重构和重新设计,用于
    参考:#365
  • [ORM]
    对于某种类型,“delete-orphan”可以在多个父类上设置;只有当实例未附加到任何这些父类中时,它才是“孤立的”

杂项

  • [引擎/池]
    一些新的 Pool 实用类,更新了文档
  • [引擎/池]
    “use_threadlocal”在 Pool 上默认为 False(与 create_engine 相同)
  • [引擎/池]
    修复了对 Compiled 对象的直接执行
  • [引擎/池]
    重新设计 create_engine()以严格处理传入的**kwargs。所有关键字参数必须被方言、连接池和引擎构造函数中的一个消耗,否则将抛出一个 TypeError,其中描述了与所选方言/池/引擎配置相关的全部无效 kwargs。
  • [数据库/类型]
    MySQL 在“describe”时捕获异常并报告为 NoSuchTableError
  • [数据库/类型]
    进一步修复了 sqlite 布尔值,默认情况下不起作用
  • [数据库/类型]
    修复了在使用模式时对 postgres 序列引用的问题

ORM

  • [ORM]
    “delete”级联将加载所有子对象,如果它们尚未加载。可以通过在 relation()上设置 passive_deletes=True 来关闭此功能(即旧行为)。
  • [ORM]
    调整了重新设计的急切查询生成,以避免在循环急切加载的关系(如反向引用)上失败
  • [ORM]
    修复了一个 bug,即 eagerload()(或 lazyload())选项未正确指示查询是否在生成 LIMIT 查询时使用“嵌套”。
  • [ORM]
    修复了刷新时循环依赖排序中的错误;如果对象 A 包含一个循环的多对一关系到对象 B,而对象 B 刚刚附加到对象 A,对象 B 本身没有改变,那么 B 的主键属性与 A 的外键属性的多对一同步不会发生。
    参考:#360
  • [orm]
    为 query.count 实现了 from_obj 参数,改进了 selectresults 上的 count 函数
    参考:#325
  • [orm]
    在 ORM 关系的“级联”步骤中添加了一个断言,以检查附加到父对象的对象的类是否合适(即如果 A.items 存储 B 对象,则如果向 A.items 附加 C,则引发错误)
  • [orm]
    新��展 sqlalchemy.ext.associationproxy,提供透明的“关联对象”映射。新示例 examples/association/proxied_association.py 进行了说明。
  • [orm]
    对单表继承进行了改进,以加载目标类下的完整层次结构
  • [orm]
    修复了拓扑排序中一个细微条件的问题,其中一个节点可能出现两次,用于
    参考:#362
  • [orm]
    对拓扑排序进行了额外的重构和重构,用于
    参考:#365
  • [orm]
    对于某种类型,“delete-orphan”可以设置在多个父类上;如果实例未附加到任何这些父类中,则该实例是“孤立的”

杂项

  • [engine/pool]
    一些新的 Pool 实用类,更新了文档
  • [engine/pool]
    “use_threadlocal”在 Pool 上默认为 False(与 create_engine 相同)
  • [engine/pool]
    修复了对编译对象的直接执行
  • [engine/pool]
    重新设计 create_engine()以严格处理传入的**kwargs。所有关键字参数必须被方言、连接池和引擎构造函数中的一个消耗,否则将抛出 TypeError,其中描述了与所选方言/池/引擎配置相关的全部无效 kwargs。
  • [databases/types]
    MySQL 在“describe”时捕获异常并报告为 NoSuchTableError
  • [databases/types]
    进一步修复 sqlite 布尔值,默认情况下未起作用
  • [databases/types]
    修复了在使用模式时对 postgres 序列引用的问题

0.3.0

发布日期:2006 年 10 月 22 日星期日

一般

  • [general]
    现在通过标准的  Python“logging”模块实现日志记录。“echo”关键字参数仍然可用,但设置/取消日志级别为其各自的类/实例。所有日志记录可以通过直接通过  Python API 设置“sqlalchemy”命名空间中的 INFO 和 DEBUG  级别来控制。类级别的日志记录在“sqlalchemy..”下,实例级别的日志记录在“sqlalchemy...0x…<00-FF>”下。测试套件包括“–log-info”和“–log-debug”参数,独立于–verbose/–quiet  工作。在 ORM 中添加了日志记录,以允许跟踪映射器配置、行迭代。
  • [general]
    文档生成系统已经进行了全面改进,设计更简单,与 Markdown 更加集成

orm

  • [orm]
    修改了属性跟踪以更智能地检测更改,特别是对于可变类型。TypeEngine  对象现在在定义如何比较两个标量实例方面发挥更大作用,包括通过 PickleType 实现的 MutableType mixin  的添加。工作单元现在将“脏”列表跟踪为所有属性管理器检测到更改的持久对象的表达式。解决的基本问题是检测 PickleType  对象上的更改,但也将类型处理和“修改”对象检查泛化为更完整和可扩展。
  • [orm]
    对“属性加载器”和“选项”架构进行了广泛重构。ColumnProperty  和 PropertyLoader 通过可切换的“策略”定义其加载行为,MapperOptions 不再使用映射器/属性复制来运行;它们通过  QueryContext 和 SelectionContext 对象在查询/实例时间传播。所有用于处理继承以及  options()的内部映射器和属性复制已被移除;映射器和属性的结构比以前简单得多,并且在新的“interfaces”模块中清晰地列出。
  • [orm]
    与映射器/属性改组相关,对映射器实例()方法进行了内部重构,使用  SelectionContext 对象跟踪操作期间的状态。轻微的 API 破坏:由于更改的结果,MapperExtension 上的  append_result()和 populate_instances()方法现在具有稍微不同的方法签名;希望这些方法目前尚未广泛使用。
  • [orm]
    instances()方法现在移至 Query,向后兼容版本仍保留在 Mapper 上。
  • [orm]
    添加了 contains_eager() MapperOption,与 instances()一起使用,用于指定应该从结果集中急切加载的属性,默认情况下使用它们的普通列名,或者根据自定义行转换函数进行转换。
  • [orm]
    对工作单元提交方案进行了更多重新排列,以更好地允许循环刷新中的依赖关系正常工作…更新了任务遍历/日志记录实现
  • [orm]
    多态映射器(即使用继承)现在按照所有继承类的表顺序生成 INSERT 语句
    参考:#321
  • [orm]
    添加了自动“行切换”功能到映射,它将检测具有相同标识键的待处理实例/已删除实例对,并将 INSERT/DELETE 转换为单个 UPDATE
  • [orm]
    “关联”映射简化以利用自动“行切换”功能
  • [orm]
    “自定义列表类”现在通过 relation()的“collection_class”关键字参数实现。旧方法仍然有效,但已被弃用
    参考:#212
  • [orm]
    在 relation()中添加了“viewonly”标志,允许构建对 flush()过程没有影响的关系。
  • [orm]
    在基本 Query 选择/获取函数中添加了“lockmode”参数,包括“with_lockmode”函数,以获取具有默认锁定模式的 Query 副本。将“read”/“update”参数转换为 select 端的 for_update 参数。
    参考:#292
  • [orm]
    在 Query/Mapper 中实现了“版本检查”逻辑,当 version_id_col 生效且使用 query.with_lockmode()获取已加载实例时使用
  • [orm]
    改进了 post_update 行为;在更新行时更好地避免更新过多行,仅更新所需的列
    参考:#208
  • [orm]
    调整了急切加载,使其“急切链”与正常的 mapper 设置保持分离,从而防止与延迟加载器操作发生冲突,修复了问题
    参考:#308
  • [orm]
    修复了延迟组加载问题
  • [orm]
    session.flush()不会关闭它打开的连接
    参考:#346
  • [orm]
    在 mapper 中添加了“batch=True”标志;如果为 False,save_obj 将完全逐个保存一个对象,包括调用 before_XXXX 和 after_XXXX
  • [orm]
    在 mapper 中添加了“column_prefix=None”参数;将给定字符串(通常为‘_’)预先添加到从 mapper 的 Table 设置的基于列的属性中。
  • [orm]
    在 query.select()的 from_obj 参数中指定连接将替换查询的主表,如果表在给定的 from_obj 中的某处。这样可以在查询中生成自定义连接和外连接,而不会使主表添加两次。
    参考:#315
  • [orm]
    调整了急切加载,更加周到地将其 LEFT OUTER JOIN 附加到给定查询中,查找可能已经设置的自定义“FROM”子句。
  • [orm]
    在 SelectResults 中添加了 join_to 和 outerjoin_to 转换方法,根据属性名称构建连接/外连接条件。还添加了 select_from 以明确设置 from_obj 参数。
  • [orm]
    从 mapper 中删除了“is_primary”标志。

sql

  • [sql] [construction]
    将“for_update”参数更改为接受 False/True/“nowait”和“read”,后两者仅由 Oracle 和 MySQL 解释。
    参考:#292
  • [sql] [construction]
    在 sql 方言中添加了 extract()函数(SELECT extract(field FROM expr))
  • [sql] [construction]
    BooleanExpression 包括新的“negate”参数,用于指定适当的否定运算符(如果有的话)。
  • [sql] [construction]
    对“IN”或“IS”子句进行否定将导致“NOT IN”、“IS NOT”(而不是 NOT (x IN y))。
  • [sql] [construction]
    Function  对象现在知道在 FROM 子句中该做什么。它们的行为应该是相同的,除了现在你还可以做像 select([‘*’],  from_obj=[func.my_function()])这样的事情来从结果中获取多个列,甚至使用 sql.column()构造来命名返回列。
    参考:#172

模式

  • [模式]
    对模式包进行了相当多的清理,删除了模糊方法、不再需要的方法。使用略微更受限制,更加强调明确性。
  • [模式]
    Table  和其他可选择对象的“primary_key”属性变成了一个类似集合的 ColumnCollection  对象;它是有序的,但没有数值索引。从相同基础表(例如两个 Alias 对象)派生的两个主键之间的比较子句可以通过  table1.primary_key==table2.primary_key 生成。
  • [模式]
    ForeignKey(Constraint)支持“use_alter=True”,通过 ALTER 创建/删除外键。这允许建立循环外键关系。
  • [模式]
    从  Table 和 Column 中删除了 append_item()方法;最好内联构造 Table/Column/相关对象,但如果需要,可以使用  append_column()、append_foreign_key()、append_constraint()等。
  • [模式]
    table.create()不再返回 Table 对象,而是没有返回值。通常情况下,通过 metadata 创建表,这是更可取的,因为它将处理表依赖关系。
  • [模式]
    添加了 UniqueConstraint(放在 Table 级别)、CheckConstraint(放在 Table 或 Column 级别)。
  • [模式]
    Column  上的 index=False/unique=True 现在创建  UniqueConstraint,index=True/unique=False 创建普通 Index,Column 上的  index=True/unique=True 创建唯一 Index。column  的‘index’和‘unique’关键字参数现在只能是布尔值;对于索引或唯一约束的显式名称和分组,使用  UniqueConstraint/Index 构造显式。
  • [模式]
    将 autoincrement=True 添加到 Column;如果明确设置为 False,则将禁用 postgres/mysql/mssql 的 SERIAL/AUTO_INCREMENT/identity seq 的模式生成。
  • [模式]
    TypeEngine 对象现在有处理复制和比较其特定类型值的方法。目前被 ORM 使用,见下文。
  • [模式]
    修复了在显式覆盖主键列时反射时出现的条件,其中 PrimaryKeyConstraint 会使反射和程序化列重复。
  • [模式]
    Column  和 ColumnElement  上的“foreign_key”属性一般不建议使用,而是使用基于“foreign_keys”列表/集合的属性,该属性考虑了一个列上的多个外键。“foreign_key”将返回“foreign_keys”列表/集合中的第一个元素,如果列表为空,则返回  None。

sqlite

  • [sqlite]
    sqlite 布尔数据类型默认将 False/True 转换为 0/1。
  • [sqlite]
    修复了 Date/Time(SLDate/SLTime)类型;现在与 postgres 一样好用。
    参考:#335

oracle

  • [oracle]
    Oracle 对 cx_Oracle.TIMESTAMP 有实验性支持,需要在光标上调用 setinputsizes(),现在可以通过 oracle 方言的‘auto_setinputsizes’标志启用。

杂项

  • [ms-sql]
    修复了 bug 261(对于区分大小写的 MS-SQL 数据库,表反射出现问题)
  • [ms-sql]
    现在可以为 pymssql 指定端口
  • [ms-sql]
    引入了新的“auto_identity_insert”选项,用于在为 IDENTITY 列指定值时自动切换到“SET IDENTITY_INSERT”模式
  • [ms-sql]
    现在支持多列外键
  • [ms-sql]
    修复了反射日期/时间列的问题
  • [ms-sql]
    添加了 NCHAR 和 NVARCHAR 类型支持
  • [firebird]
    别名不使用“AS”
  • [firebird]
    在反射不存在的表时正确地引发 NoSuchTableError
  • [连接/池/执行]
    连接池跟踪打开的光标,并在连接返回到池中时自动关闭它们。可以受到导致引发错误或不执行任何操作的选项的影响。修复了 MySQL 等其他问题
  • [连接/池/执行]
    修复了 Connection 在提交/回滚后不会失去其 Transaction 的 bug
  • [连接/池/执行]
    向 ComposedSQLEngine、ResultProxy 添加了 scalar()方法
  • [连接/池/执行]
    当 ResultProxy 本身关闭时,ResultProxy 将关闭底层光标。这将自动关闭已获取所有行(或已调用 scalar())的 ResultProxy 对象的光标。
  • [连接/池/执行]
    ResultProxy.fetchall()在内部使用 DBAPI fetchall()以提高效率,也添加到映射器迭代中(感谢 Michael Twomey)

通用

  • [通用]
    现在通过标准的  Python“logging”模块实现日志记录。“echo”关键字参数仍然有效,但为它们各自的类/实例设置/取消设置日志级别。所有日志记录可以通过直接在  Python API 中为“sqlalchemy”命名空间的记录器设置 INFO 和 DEBUG  级别来直接控制。类级别的日志记录在“sqlalchemy..”下,实例级别的日志记录在“sqlalchemy...0x…<00-FF>”下。测试套件包括“–log-info”和“–log-debug”参数,它们独立于–verbose/–quiet  工作。在 orm 中添加了日志记录,以允许跟踪映射器配置,行迭代。
  • [通用]
    文档生成系统已经进行了全面改进,设计更简单,与 Markdown 更加集成

orm

  • [orm]
    修改属性跟踪以更智能地检测更改,特别是对可变类型。TypeEngine  对象现在在定义如何比较两个标量实例方面发挥更大作用,包括通过 PickleType 实现的 MutableType  混合。工作单元现在跟踪“脏”列表,表示所有属性管理器检测到更改的持久对象的表达式。解决的基本问题是检测 PickleType  对象上的更改,但也将类型处理和“修改”对象检查泛化为更完整和可扩展。
  • [orm]
    对“属性加载器”和“选项”架构进行了广泛重构。ColumnProperty  和 PropertyLoader 通过可切换的“策略”定义其加载行为,MapperOptions 不再使用映射器/属性复制来运行;它们通过  QueryContext 和 SelectionContext 对象在查询/实例时间传播。已删除用于处理继承以及  options()的所有内部映射器和属性复制;映射器和属性的结构比以前简单得多,并且在新的“interfaces”模块中清晰地列出。
  • [orm]
    与映射器/属性重构相关,内部重构到映射器实例()方法,使用  SelectionContext 对象在操作期间跟踪状态。轻微的 API 破坏:由于更改,MapperExtension 上的  append_result()和 populate_instances()方法现在具有稍微不同的方法签名;希望这些方法目前还没有被广泛使用。
  • [orm]
    instances()方法现在移动到 Query 中,向后兼容版本仍保留在 Mapper 上。
  • [orm]
    添加了 contains_eager() MapperOption,与 instances()一起使用,指定应该从结果集中急切加载的属性,默认情况下使用它们的普通列名,或者根据自定义行转换函数进行转换。
  • [orm]
    对工作单元提交方案进行了更多重新排列,以更好地允许循环刷新内的依赖关系正常工作…更新了任务遍历/日志记录实现
  • [orm]
    多态映射器(即使用继承)现在按照所有继承类的表的顺序生成 INSERT 语句
    参考:#321
  • [orm]
    添加了自动的“行切换”功能到映射,它将检测到具有相同标识键的待处理实例/已删除实例对,并将 INSERT/DELETE 转换为单个 UPDATE
  • [orm]
    “关联”映射简化以利用自动“行切换”功能
  • [orm]
    “自定义列表类”现在通过 relation()的“collection_class”关键字参数实现。旧方法仍然有效,但已被弃用。
    参考:#212
  • [orm]
    在 relation()中添加了“viewonly”标志,允许构建对 flush()过程没有影响的关系。
  • [orm]
    向基本 Query select/get 函数添加了“lockmode”参数,包括“with_lockmode”函数以获取具有默认锁定模式的 Query 副本。将“read”/“update”参数转换为 select 侧的 for_update 参数。
    参考:#292
  • [orm]
    在 Query/Mapper 中实现了“版本检查”逻辑,当 version_id_col 生效且使用 query.with_lockmode() 获取已加载实例时使用
  • [orm]
    改进了 post_update 行为;在不更新过多行的情况下,仅更新所需列
    参考:#208
  • [orm]
    调整了 eager loading,使其“eager chain”与正常 mapper 设置保持分离,从而防止与延迟加载器操作发生冲突,修复
    参考:#308
  • [orm]
    修复了延迟组加载的问题
  • [orm]
    session.flush() 不会关闭它打开的连接
    参考:#346
  • [orm]
    向 mapper 添加了“batch=True”标志;如果为 False,save_obj 将完全一次保存一个对象,包括调用 before_XXXX 和 after_XXXX
  • [orm]
    向 mapper 添加了“column_prefix=None”参数;将给定字符串(通常为‘_’)预先添加到从 mapper 的 Table 设置的基于列的属性中
  • [orm]
    在 query.select() 的 from_obj 参数中指定连接将替换查询的主表,如果表在给定的 from_obj 中的某处。这样可以在查询中生成自定义连接和外连接,而不会使主表添加两次。
    参考:#315
  • [orm]
    eagerloading 被调整以更加周到地将其 LEFT OUTER JOIN 附加到给定查询中,查找可能已经设置的自定义“FROM”子句。
  • [orm]
    在 SelectResults 中添加了 join_to 和 outerjoin_to 转换方法,用于根据属性名称构建连接/外连接条件。还添加了 select_from 方法,用于显式设置 from_obj 参数。
  • [orm]
    从 mapper 中移除了“is_primary”标志。

sql

  • [sql] [construction]
    将“for_update”参数更改为接受 False/True/“nowait” 和 “read”,后两者仅由 Oracle 和 MySQL 解释
    参考:#292
  • [sql] [construction]
    添加了对 SQL 方言的 extract() 函数(SELECT extract(field FROM expr))的支持
  • [sql] [construction]
    BooleanExpression 包括新的“negate”参数,以指定适当的否定运算符(如果有的话)。
  • [sql] [construction]
    对“IN”或“IS”子句进行否定操作将导致“NOT IN”、“IS NOT”(而不是 NOT (x IN y))。
  • [sql] [construction]
    Function  对象现在在 FROM 子句中知道该做什么。它们的行为应该是相同的,除了现在你还可以像这样做 select([‘*’],  from_obj=[func.my_function()]) 从结果中获取多列,甚至使用 sql.column() 构造来命名返回列
    参考:#172

模式

  • [模式]
    对模式包进行了相当多的清理,删除了模棱两可的方法,不再需要的方法。使用略微受限,更加强调明确性
  • [模式]
    Table  和其他可选项的 “primary_key” 属性成为了一个类似集合的 ColumnCollection  对象;它是有序的,但没有数值索引。从同一基础表派生的两个 pks 之间的比较子句(例如两个 Alias 对象)可以通过  table1.primary_key==table2.primary_key 生成
  • [模式]
    ForeignKey(Constraint) 支持 “use_alter=True”,以通过 ALTER 创建/删除外键。这允许设置循环外键关系。
  • [模式]
    从  Table 和 Column 中移除了 append_item() 方法;最好是内联构造  Table/Column/相关对象,但如果需要,可以使用  append_column()、append_foreign_key()、append_constraint() 等。
  • [模式]
    table.create() 现在不再返回 Table 对象,而是没有返回值。通常情况下,通过元数据创建表是可取的,因为它会处理表依赖关系。
  • [模式]
    添加了 UniqueConstraint(放置在 Table 级别)、CheckConstraint(放置在 Table 或 Column 级别)。
  • [模式]
    Column  上的 index=False/unique=True 现在会创建一个  UniqueConstraint,index=True/unique=False 创建一个普通 Index,Column 上的  index=True/unique=True 会创建一个唯一 Index。Column 上的 ‘index’ 和 ‘unique’  关键字参数现在只能是布尔值;对于索引或唯一约束的显式名称和分组,使用 UniqueConstraint/Index 构造显式。
  • [模式]
    向 Column 添加了 autoincrement=True;如果显式设置为 False,则会禁用 postgres/mysql/mssql 的 SERIAL/AUTO_INCREMENT/identity seq 的模式生成
  • [模式]
    TypeEngine 对象现在具有处理其特定类型值的复制和比较方法。目前由 ORM 使用,请参见下文。
  • [模式]
    在反射期间出现了一个条件,在该条件中,当主键列被显式覆盖时,PrimaryKeyConstraint 会将反射和编程列都重复
  • [模式]
    Column  和 ColumnElement 上的 “foreign_key” 属性已被弃用,而是采用了基于 “foreign_keys”  列表/集合的属性,该属性考虑了一列上的多个外键。“foreign_key” 将返回 “foreign_keys”  列表/集合中的第一个元素,如果列表为空,则返回 None。

sqlite

  • [sqlite]
    sqlite 布尔数据类型默认将 False/True 转换为 0/1
  • [sqlite]
    对日期/时间(SLDate/SLTime)类型进行修复;现在与 postgres 一样工作良好
    参考:#335

oracle

  • [oracle]
    Oracle 对 cx_Oracle.TIMESTAMP 有试验性支持,这需要在光标上调用 setinputsizes() 方法,现在通过 oracle 方言的 ‘auto_setinputsizes’ 标志启用。

其他

  • [ms-sql]
    修复了 bug 261(对于 MS-SQL 区分大小写的数据库,表反射出现问题)
  • [ms-sql]
    现在可以为 pymssql 指定端口
  • [ms-sql]
    引入了新的“auto_identity_insert”选项,用于在为 IDENTITY 列指定值时自动切换到“SET IDENTITY_INSERT”模式
  • [ms-sql]
    现在支持多列外键
  • [ms-sql]
    修复了反射日期/日期时间列的问题
  • [ms-sql]
    添加了对 NCHAR 和 NVARCHAR 类型的支持
  • [firebird]
    别名不使用“AS”
  • [firebird]
    当反映不存在的表时,正确引发 NoSuchTableError
  • [connections/pooling/execution]
    连接池跟踪打开的游标,并在连接返回到连接池时自动关闭它们,如果仍然打开了游标。可以受到使其引发错误或不做任何操作的选项的影响。修复了 MySQL 等数据库的问题
  • [connections/pooling/execution]
    修复了 Connection 在提交/回滚后不会失去其 Transaction 的 bug
  • [connections/pooling/execution]
    在 ComposedSQLEngine、ResultProxy 中添加了 scalar() 方法
  • [connections/pooling/execution]
    当 ResultProxy 被关闭时,将关闭底层的游标。当 ResultProxy 对象的所有行都被提取(或者调用了 scalar() 方法)时,这将自动关闭游标。
  • [connections/pooling/execution]
    ResultProxy.fetchall() 内部使用 DBAPI 的 fetchall() 方法以提高效率,并添加到映射迭代中(由 Michael Twomey 提供)
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
Python
SqlAlchemy 2.0 中文文档(三十)(3)
SqlAlchemy 2.0 中文文档(三十)
13 1
|
6天前
|
SQL 存储 缓存
SqlAlchemy 2.0 中文文档(三十)(5)
SqlAlchemy 2.0 中文文档(三十)
15 1
|
6天前
|
SQL 存储 缓存
SqlAlchemy 2.0 中文文档(三十)(4)
SqlAlchemy 2.0 中文文档(三十)
15 0
|
6天前
|
数据库连接 API 数据库
SqlAlchemy 2.0 中文文档(三十)(2)
SqlAlchemy 2.0 中文文档(三十)
15 0
|
6天前
|
数据库 Python
SqlAlchemy 2.0 中文文档(三十)(1)
SqlAlchemy 2.0 中文文档(三十)
11 1
|
8天前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(七十)(3)
SqlAlchemy 2.0 中文文档(七十)
14 1
|
8天前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(七十)(4)
SqlAlchemy 2.0 中文文档(七十)
11 1
|
8天前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(七十)(1)
SqlAlchemy 2.0 中文文档(七十)
11 1
|
5天前
|
存储 JSON 数据格式
SqlAlchemy 2.0 中文文档(五十)(2)
SqlAlchemy 2.0 中文文档(五十)
8 0
|
5天前
|
SQL 数据库 数据安全/隐私保护
SqlAlchemy 2.0 中文文档(五十)(6)
SqlAlchemy 2.0 中文文档(五十)
11 0