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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: SqlAlchemy 2.0 中文文档(七十)

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


0.3.4

发布日期:2007 年 1 月 23 日

通用

  • [general]
    全局“insure”->”ensure”更改。在美式英语中,“insure”实际上与“ensure”在很大程度上是可以互换的(字典上是这么说的),所以我并不是完全文盲,但“ensure”无疑是非歧义的更佳选择。

orm

  • [orm]
    在这个潘多拉魔盒中打开了第一个漏洞:说 query.select_by(somerelationname=someinstance) 将创建“somerelationname”映射器表示的主键列与“someinstance”实际主键的连接。
  • [orm]
    重新设计了关系与“多态”映射器的交互方式,即具有 select_table 和多态标志的映射器。更好地确定适当的连接条件,与用户定义的连接条件的交互,以及对自引用多态映射器的支持。
  • [orm]
    关于多态映射关系,当编译关系时进行了一些更深入的错误检查,以检测在关系的两侧都在主连接条件中具有外键引用的模糊“primaryjoin”的情况。还加强了用于定位“关系方向”的条件,将关系的“外键”与“主连接”关联起来
  • [orm]
    对“concrete”继承映射概念进行了一点改进,尽管该概念尚未完全明确(添加了支持在多态基础上创建具体映射器的测试用例)。
  • [orm]
    修复了在 synonym()上“proxy=True”行为的问题
  • [orm]
    修复了删除孤儿在许多对多关系中基本上无法工作的错误,反向引用通常隐藏了症状
    参考:#427
  • [orm]
    在映射器编译步骤中添加了互斥锁。我一直不愿意在  SA  中添加任何线程内容,但这是真正需要的一个地方,因为映射器通常是“全局”的,虽然它们的状态在正常操作期间不会改变,但初始编译步骤会显著修改内部状态,并且这一步通常不会发生在模块级别的初始化时间(除非调用  compile()),而是在第一次请求时发生
  • [orm]
    实际上实现了“session.merge()”的基本概念。需要更多测试。
  • [orm]
    添加了“compile_mappers()”函数作为编译所有映射器的快捷方式
  • [orm]
    修复了 MapperExtension 创建实例的问题,使实体名称正确关联到新实例
  • [orm]
    ORM 对象实例化的速度增强,行的急切加载
  • [orm]
    发送到“cascade”字符串的无效选项将引发异常
    参考:#406
  • [orm]
    修复了映射器刷新/过期中的错误,急切加载器未正确重新填充项目列表
    参考:#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 错误,即嵌套的选择语句未与 Query 对象生成的主选择相关联。
  • [sql]
    另一个修复子查询相关性的方法,以便仅具有一个 FROM 元素的子查询相关联该单个元素,因为查询中至少需要一个 FROM 元素。
  • [sql]
    默认的“timezone”设置现在为 False。这对应于 Python 的 datetime 行为以及 Postgres 的 timestamp/time 类型(目前是唯一有时区敏感的方言)
    参考:#414
  • [sql]
    “op()”函数现在被视为“操作”,而不是“比较”。区别在于,操作会产生一个 BinaryExpression,从中可以进行进一步的操作,而比较会产生更严格的 BooleanExpression
  • [sql]
    尝试将反射的主键列重新定义为非主键会引发错误
  • [sql]
    类型系统略有修改,以支持可以被方言覆盖的 TypeDecorators(好吧,这不是很清楚,它允许下面的 mssql 调整成为可能)

扩展

  • [扩展]
    为 assign_mapper 添加了“validate=False”参数,如果为 True,则确保只有映射的属性被命名
    参考:#426
  • [扩展]
    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]
    为具有 PGBigInteger/autoincrement 的 postgres 表添加了“BIGSERIAL”支持
  • [postgres]
    修复了 Postgres 反射以更好地处理存在模式名称时的情况;感谢 jason (at) ncsmags.com
    参考:#402
  • [火鸟]
    约束创建顺序将主键放在所有其他约束之前;对于 Firebird 是必需的,对于其他数据库也是一个好主意
    参考:#408
  • [火鸟]
    Firebird 修复以自动加载多字段外键
    参考:#409
  • [火鸟]
    Firebird NUMERIC 类型正确处理没有精度的类型
    参考:#409

0.3.3

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

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

0.3.2

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

  • [无标签]
    修复了主要连接池错误。修复了 MySQL 不同步错误,还将防止事务在所有数据库中意外回滚
    参考:#387
  • [无标签]
    与 0.3.1 相比的主要速度增强,将速度提升至 0.2.8 水平
  • [无标签]
    使数十个生成日志消息的调试日志调用成为有条件的
  • [无标签]
    修复了级联规则中的错误,从而可能在保存/更新级联时不必要地级联整个对象图
  • [无标签]
    属性模块中的各种加速
  • [无标签]
    会话中的身份映射默认情况下不再使用弱引用。要使其使用弱引用,请使用 create_session(weak_identity_map=True)修复
    参考:#388
  • [无标签]
    MySQL 检测到错误 2006(服务器已断开连接)和 2014(命令不同步)并使发生错误的连接无效。
  • [无标签]
    MySQL bool 类型修复:
    参考:#307
  • [无标签]
    Postgres 反射修复:
    参考:#349#382
  • [无标签]
    为 EXCEPT、INTERSECT、EXCEPT ALL、INTERSECT ALL 添加关键字
    参考:#247
  • [无标签]
    assignmapper 扩展中的 assign_mapper 返回创建的映射器
    参考:#2110
  • [无标签]
    为 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]
    通过将 selectable 发送到 IN,通过 in_()函数不再创建多个 select 的“union”;现在只允许一个 selectable 传递给 in_()函数(如果需要 union,请自行创建 union)
  • [no_tags]
    改进了通过 cascade=”none”等禁用保存-更新级联的支持
  • [no_tags]
    为   relation()添加了“remote_side”参数,仅与自引用映射器一起使用,以强制父/子关系的方向。替换了用于“切换”方向的“foreignkey”参数的使用。“foreignkey”参数对于所有用途都已弃用,并最终将被一个专用于映射器上的  ForeignKey 规范的参数所取代。

0.3.1

发布日期:Mon Nov 13 2006

orm

  • [orm]
    “delete”级联将加载所有子对象,如果它们尚未加载。可以通过在 relation()上设置 passive_deletes=True 来关闭此功能(即旧行为)。
  • [orm]
    重新设计的急切查询生成调整,以避免在循环急切加载关系(如反向引用)上失败
  • [orm]
    修复了 eagerload()(也不是 lazyload())选项未正确指示 Query 在生成 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]
    修复了对 Compiled 对象的直接执行
  • [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  混合。unit-of-work 现在将“脏”列表跟踪为所有属性管理器检测到更改的所有持久对象的表达式。修复的基本问题是检测 PickleType  对象上的更改,但也将类型处理和“修改”对象检查泛化为更完整和可扩展的形式。
  • [orm]
    对“属性加载器”和“选项”架构进行了广泛的重构。ColumnProperty  和 PropertyLoader 通过可切换的“策略”定义它们的加载行为,MapperOptions  不再使用映射器/属性复制来运行;它们通过查询/实例时间通过 QueryContext 和 SelectionContext  对象传播。所有用于处理继承以及 options()  的内部映射器和属性的复制都已被移除;映射器和属性的结构比以前简单得多,并且在新的“interfaces”模块中清晰地列出。
  • [orm]
    关于映射器/属性大修,内部重构到映射器  instances() 方法,使用 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]
    调整急切加载,使其“急切链”与正常映射器设置分开,从而防止与惰性加载器操作冲突,修复
    参考:#308
  • [orm]
    修复延迟组加载
  • [orm]
    session.flush() 不会关闭它打开的连接
    参考:#346
  • [orm]
    向映射器添加了“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]
    现在函数对象知道如何在  FROM 子句中操作。它们的行为应该是相同的,只是现在你还可以做一些像 select([‘*’],  from_obj=[func.my_function()])这样的事情,以从结果中获取多个列,甚至使用  sql.column()构造来命名返回的列。
    参考:#172

schema

  • [schema]
    对 schema 包进行了相当多的清理,删除了模糊的方法,不再需要的方法。稍微更受限制的使用,更加强调明确性
  • [schema]
    Table  和其他可选择对象的“primary_key”属性变成了一个类似集合的 ColumnCollection  对象;它是有序的,但没有数值索引。从相同基础表派生的两个主键之间的比较子句(即两个 Alias 对象之间)可以通过  table1.primary_key==table2.primary_key 生成。
  • [schema]
    ForeignKey(Constraint)支持“use_alter=True”,通过 ALTER 创建/删除外键。这允许设置循环外键关系。
  • [schema]
    从  Table 和 Column 中删除了 append_item()方法;最好是内联构造  Table/Column/相关对象,但如果需要,可以使用  append_column()、append_foreign_key()、append_constraint()等方法。
  • [schema]
    table.create() 不再返回 Table 对象,而是没有返回值。通常情况下,表是通过 metadata 创建的,这是更好的方式,因为它会处理表的依赖关系。
  • [模式]
    添加了 UniqueConstraint(在 Table 级别)、CheckConstraint(在 Table 或 Column 级别)。
  • [模式]
    Column  上的 index=False/unique=True 现在创建一个  UniqueConstraint,index=True/unique=False 创建一个普通的  Index,index=True/unique=True 在 Column 上创建一个唯一的 Index。column 上的 ‘index’ 和  ‘unique’ 关键字参数现在仅为布尔值;对于索引或唯一约束的显式名称和分组,请显式使用 UniqueConstraint/Index  构造。
  • [模式]
    将 autoincrement=True 添加到 Column;如果明确设置为 False,则会禁用 postgres/mysql/mssql 的 SERIAL/AUTO_INCREMENT/identity 序列的模式生成
  • [模式]
    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 有试验性支持,这需要对现在通过 oracle 方言的游标进行 setinputsizes() 调用,现在通过 ‘auto_setinputsizes’ 标志启用。

杂项

  • [ms-sql]
    修复了 bug 261(对于区分大小写的数据库,表反射失效的问题)
  • [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 等的问题
  • [连接/池/执行]
    修复了连接在提交/回滚后不会丢失其事务的错误。
  • [连接/池/执行]
    ComposedSQLEngine、ResultProxy 现在添加了 scalar() 方法。
  • [connections/pooling/execution]
    ResultProxy 在其自身关闭时将关闭底层游标。当所有行都已提取(或已调用 scalar())的 ResultProxy 对象将自动关闭游标。
  • [connections/pooling/execution]
    ResultProxy.fetchall() 在内部使用 DBAPI fetchall() 实现更好的效率,也添加到 mapper 迭代中(感谢 Michael Twomey)。

0.3.11

发布日期:2007 年 10 月 14 日(星期日)

orm

  • [orm]
    添加了一个检查,用 join() 从 A->B 连接时,同时使用两个不同的 m2m 表。这在 0.3 中会引发错误,但在使用别名时在 0.4 中是可能的。
    参考:#687
  • [orm]
    修复了 Session.merge() 中的小异常抛出 bug。
  • [orm]
    修复了映射器的一个 bug,该 bug 与一个表没有 PK 列的联接有关,映射器未检测到联接的表没有 PK。
  • [orm]
    修复了从自定义继承条件确定适当的同步子句的 bug。
    参考:#769
  • [orm]
    如果另一侧集合不包含该项,则 backref 移除对象操作不会失败,支持 noload 集合。
    参考:#813

engine

  • [engine]
    修复了另一个偶发性竞态条件,在使用带 threadlocal 设置的池时可能会发生。

sql

  • [sql]
    调整了像 func.count(t.c.col.distinct()) 这样的 DISTINCT 优先级。
  • [sql]
    修复了在 :bind                                                  p                                  a                                  r                                  a                                  m                                  s                                  中检测内部“                                          params 中检测内部“                           params中检测内部”字符的 bug。
    参考:#719
  • [sql]
    不要假设连接条件仅包含列对象。
    参考:#768
  • [sql]
    调整了 NOT 的运算符优先级,使其与 ‘’ 和其他运算符匹配,因此 ~(xy) 产生 NOT (x=y),这与 MySQL < 5.0 兼容(不喜欢 “NOT x=y”)。
    参考:#764

mysql

  • [mysql]
    生成模式时修正了 YEAR 列的规范。

sqlite

  • [sqlite]
    日期字符串的传递

mssql

  • [mssql]
    添加了对 TIME 列(使用 DATETIME 模拟)的支持。
    参考:#679
  • [mssql]
    添加了对 BIGINT、MONEY、SMALLMONEY、UNIQUEIDENTIFIER 和 SQL_VARIANT 的支持。
    参考:#721
  • [mssql]
    删除反射表时现在会引用索引名称。
    参考:#684
  • [mssql]
    现在可以为 PyODBC 指定 DSN,使用类似 mssql:///?dsn=bob 的 URI。

oracle

  • [oracle]
    从“binary”类型中移除 LONG_STRING、LONG_BINARY,因此类型对象不会尝试将其值读取为 LOB。
    参考:#622#751

杂项

  • [postgres]
    当从备用模式中反映表时,“默认”放置在主键上的内容,即通常是序列名称,无条件地引用了 “schema” 名称,因此需要引用的模式名称是正确的。对于不需要引用的模式名称来说,这有点多余但不会有害。
  • [firebird]
    由于票证 #370(正确的方式),supports_sane_rowcount() 设置为 False。
  • [firebird]
    修复了 Column 的 nullable 属性的反射。

orm

  • [orm]
    添加了一个检查,用于使用 join() 从 A->B 进行连接,沿两个不同的 m2m 表。这在 0.3 中引发错误,但在 0.4 中使用别名时是可能的。
    参考:#687
  • [orm]
    在 Session.merge() 中修复了一个小的异常抛出错误。
  • [orm]
    修复了一个错误,其中 mapper 与一个表连接在一起,该表没有主键列,但不会检测到连接表没有主键。
  • [orm]
    修复了从自定义继承条件中确定正确同步子句的错误。
    参考:#769
  • [orm]
    如果另一侧的集合不包含该项,则 backref 移除对象操作不会失败,支持 noload 集合。
    参考:#813

engine

  • [engine]
    修复了在使用带有 threadlocal 设置的池时可能发生的另一个偶发竞争条件。

sql

  • [sql]
    调整了对像 func.count(t.c.col.distinct()) 这样的子句的 DISTINCT 优先级。
  • [sql]
    修复了对 :bind                                                  p                                  a                                  r                                  a                                  m                                  s                                  中内部‘                                          params 中内部 ‘                           params中内部’ 字符的检测。
    参考:#719
  • [sql]
    不再假设连接标准仅由列对象组成。
    参考:#768
  • [sql]
    调整了 NOT 运算符的优先级,使其与 ‘’ 和其他运算符匹配,以便 ~(xy) 产生 NOT (x=y),这与 MySQL < 5.0 兼容(不喜欢 “NOT x=y”)。
    参考:#764

mysql

  • [mysql]
    在生成模式时修复了 YEAR 列的规范。

sqlite

  • [sqlite]
    对字符串化的日期进行了穿透处理。

mssql

  • [mssql]
    添加了对 TIME 列(使用 DATETIME 模拟)的支持。
    参考:#679
  • [mssql]
    添加了对 BIGINT、MONEY、SMALLMONEY、UNIQUEIDENTIFIER 和 SQL_VARIANT 的支持。
    参考:#721
  • [mssql]
    从反映的表中删除索引名称时现在会引用它们。
    参考:#684
  • [mssql]
    现在可以为 PyODBC 指定 DSN,使用类似 mssql:///?dsn=bob 的 URI。

oracle

  • [oracle]
    从 “binary” 类型中删除了 LONG_STRING、LONG_BINARY,因此类型对象不会尝试将其值读取为 LOB。
    参考:#622, #751

杂项

  • [postgres]
    从替代模式反射表时,放在主键上的“默认”(通常是序列名称)无条件地引用了“模式”名称,因此需要引用的模式名称是可以的。对于不需要引用的模式名称来说,这有点多余但不会有害。
  • [firebird]
    supports_sane_rowcount()设置为 False,因为 ticket#370(正确方式)。
  • [firebird]
    修复了 Column 的 nullable 属性的反射。

0.3.10

发布日期:2007 年 7 月 20 日星期五

通用

  • [general]
    在 0.3.9 中添加的新互斥锁导致在竞争条件下 pool_timeout 功能失败;如果许多线程同时将池推入溢出,线程将立即引发 TimeoutError,没有延迟。此问题已得到解决。

orm

  • [orm]
    清理连接绑定会话,SessionTransaction

sql

  • [sql]
    使连接绑定的元数据与隐式执行一起工作
  • [sql]
    外键规范可以在其标识符中包含任何字符
    参考:#667
  • [sql]
    向二进制子句比较添加了可交换性意识,改进了 ORM 延迟加载优化
    参考:#664

杂项

  • [postgres]
    修复了最大标识符长度(63)
    参考:#571

通用

  • [general]
    在 0.3.9 中添加的新互斥锁导致在竞争条件下 pool_timeout 功能失败;如果许多线程同时将池推入溢出,线程将立即引发 TimeoutError,没有延迟。此问题已得到解决。

orm

  • [orm]
    清理连接绑定会话,SessionTransaction

sql

  • [sql]
    使连接绑定的元数据与隐式执行一起工作
  • [sql]
    外键规范可以在其标识符中包含任何字符
    参考:#667
  • [sql]
    向二进制子句比较添加了可交换性意识,改进了 ORM 延迟加载优化
    参考:#664

杂项

  • [postgres]
    修复了最大标识符长度(63)
    参考:#571


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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
3天前
|
云安全 人工智能 自然语言处理
AI说的每一句话,都靠谱吗?
阿里云提供AI全栈安全能力,其中针对AI输入与输出环节的安全合规挑战,我们构建了“开箱即用”与“按需增强”相结合的多层次、可配置的内容安全机制。
|
10天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
4天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
418 187
|
2天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
8天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
4天前
|
消息中间件 安全 NoSQL
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的 2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件 AliEE”、“消息队列软件 RocketMQ”、“云数据库 Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
313 194