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

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

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


0.3.9

发布日期:2007 年 7 月 15 日星期日

通用

  • [general]
    NoSuchColumnError 的更好错误消息
    参考:#607
  • [general]
    最终弄清楚了如何将 setuptools 版本引入,可作为 sqlalchemy.version 使用
    参考:#428
  • [general]
    各种“engine”参数,如“engine”,“connectable”,“engine_or_url”,“bind_to”等都存在,但已弃用。它们都被单个术语“bind”取代。您还可以使用  metadata.bind = 设置 MetaData 的“bind”。

orm

  • [orm]
    与 0.4 向前兼容:向 Query 添加了 one(),first()和 all()。几乎所有 0.4 中的 Query 功能在 0.3.9 中都存在,以实现向前兼容。
  • [orm]
    reset_joinpoint()这次真的真的有效,保证!允许您从根重新加入:query.join([‘a’,  ‘b’]).filter().reset_joinpoint().join([‘a’, ‘c’]).filter().all()在 0.4  中,所有的 join()调用都从“root”开始。
  • [orm]
    在 mapper()构造步骤中添加了同步,以避免在不同线程中编译预先存在的 mapper 时出现线程冲突
    参考:#613
  • [orm]
    当两个相同名称的主键列被混合成一个属性时,Mapper 会发出警告。这在映射到联接(或继承)时经常发生。
  • [orm]
    synonym()属性现已完全受到所有 Query joining/ with_parent 操作的支持。
    参考:#598
  • [orm]
    修复了使用 uselist=False 关系删除项目时的非常愚蠢的错误。
  • [orm]
    还记得关于多态联合的所有东西吗?用于连接表继承?有趣的事情是…对于连接表继承,你基本上不需要它,你可以通过 outerjoin()将所有表串在一起。然而,如果涉及具体表,则 UNION 仍然适用(因为没有东西可以加入它们)。
  • [orm]
    对贪婪加载进行了小修复,以更好地与使用直接“outerjoin”子句的多态映射器的贪婪加载配合使用。

sql

  • [sql]
    对不是默认模式的表的外键需要明确指定模式;即 ForeignKey(‘alt_schema.users.id’)
  • [sql]
    MetaData 现在可以用引擎或 url 作为第一个参数来构造,就像 BoundMetaData 一样。
  • [sql]
    BoundMetaData 现已弃用,并且 MetaData 是一个直接的替代品。
  • [sql]
    DynamicMetaData 已更名为 ThreadLocalMetaData。DynamicMetaData 名称已弃用,并且是 ThreadLocalMetaData 或者当 threadlocal=False 时是常规 MetaData 的别名。
  • [sql]
    复合主键被表示为非键集,以允许由具有相同名称的列组成的复合键;在 Join 中发生。帮助继承方案制定正确的 PK。
  • [sql]
    提高了从联接中获取“正确”的和最小化的主键列集的能力,将外键和其他等值列等效。这也主要是为了帮助继承方案制定最佳选择的主键列。
    参考:#185
  • [sql]
    在 Sequence.create()/drop(),ColumnDefault.execute()中添加了‘bind’参数。
  • [sql]
    列可以使用与列名不同的“key”属性在反射表中被重写,包括主键列
    参考:#650
  • [sql]
    修复了在结果中存在重复列名时“模棱两可的列”结果检测的问题。
    参考:#657
  • [sql]
    对“列定位”进行了一些增强,即将一列与另一个可选择的“对应”列进行匹配的能力。这主要影响 ORM 映射到复杂连接的能力
  • [sql]
    MetaData 和所有 SchemaItems 都可以安全地与 pickle 一起使用。可以将缓慢的表反射转储到一个 pickled 文件中以供以后重用。只需在解 pickle 后重新连接到元数据。
    参考:#619
  • [sql]
    在 QueuePool 的“overflow”计算中添加了互斥锁,以防止绕过 max_overflow 的竞争条件
  • [sql]
    修复了复合选择的分组,以便给出正确的结果。在某些情况下会在 sqlite 上出现问题,但这些情况本来就会产生不正确的结果,sqlite 不支持分组的复合选择
    参考:#623
  • [sql]
    修复了运算符的优先级,以便正确��用括号
    参考:#620
  • [sql]
    调用.in_()(即不带参数)将返回“CASE WHEN ( IS NULL) THEN NULL ELSE 0 END = 1”,以便在所有情况下返回 NULL 或 False,而不是抛出错误
    参考:#545
  • [sql]
    修复了 select()的“where”/“from”条件,以接受 unicode 字符串以及常规字符串 - 两者都转换为 text()
  • [sql]
    添加了独立的 distinct()函数,以补充 column.distinct()
    参考:#558
  • [sql]
    result.last_inserted_ids()应返回一个与表的主键约束大小相同的列表。通过“被动”创建而不通过 cursor.lastrowid 可用的值将为 None。
  • [sql]
    修复了长标识符检测,使用>而不是>=来确定最大标识符长度
    参考:#589
  • [sql]
    修复了一个错误,即 selectable.corresponding_column(selectable.c.col)如果 selectable 是一个表和另一个涉及相同表的连接的连接,则不会返回 selectable.c.col。搞乱了 ORM 的决策
    参考:#593
  • [sql]
    在 types.py 中添加了 Interval 类型
    参考:#595

mysql

  • [mysql]
    修复了捕获一些暗示连接中断的错误
    参考:#625
  • [mysql]
    修复了百分号运算符的转义
    参考:#624
  • [mysql]
    添加了对“fields”保留字的支持
    参考:#590
  • [mysql]
    各种反射增强/修复

sqlite

  • [sqlite]
    重新排列了方言初始化,以便有时间警告 pysqlite1 太旧。
  • [sqlite]
    sqlite 更好地处理混合使用各种 Date/Time/DateTime 列的日期时间对象
  • [sqlite]
    字符串 PK 列插入不会被 OID 覆盖
    参考:#603

mssql

  • [mssql]
    修复了 pyodbc 的端口选项处理
    参考:#634
  • [mssql]
    现在能够反射标识列的起始和增量值
  • [mssql]
    与 pyodbc 一起使用 scope_identity()的初步支持

oracle

  • [oracle]
    日期时间修复:使亚秒级 TIMESTAMP 正常工作,添加支持仅具有年/月/日的 types.Date 的 OracleDate
    参考:#604
  • [oracle]
    添加方言标志“auto_convert_lobs”,默认为 True;将导致在结果集中检测到的任何 LOB 对象被强制转换为 OracleBinary,以便 LOB 自动读取,如果没有 typemap 存在(即,如果发出了文本执行())。
  • [oracle]
    mod 运算符‘%’产生 MOD
    参考:#624
  • [oracle]
    在使用 Python 2.3 时,将 cx_oracle 日期时间对象转换为 Python datetime.datetime
    参考:#542
  • [oracle]
    修复了 Oracle TEXT 类型中的 Unicode 转换

杂项

  • [ext]
    遍历字典关联代理现在类似于字典,而不是类似于 InstrumentedList(例如,通过键而不是值)
  • [ext]
    关联代理不再紧密绑定到源集合,并且使用 thunk 构造
    参考:#597
  • [ext]
    添加了 selectone_by()以分配映射器
  • [postgres]
    修复了百分号运算符的转义
    参考:#624
  • [postgres]
    添加了对域反射的支持
    参考:#570
  • [postgres]
    反射期间缺失的类型解析为 Null 类型,而不是引发错误
  • [postgres]
    上面“schema”中的修复解决了从 alt-schema 表反射到 public schema 表的外键反射

general

  • [general]
    NoSuchColumnError 的更好错误消息
    参考:#607
  • [general]
    最终找到了如何获取 setuptools 版本,可作为 sqlalchemy.version 使用
    参考:#428
  • [general]
    各种“engine”参数,如“engine”,“connectable”,“engine_or_url”,“bind_to”等都存在,但已弃用。它们都被单个术语“bind”取代。您还可以使用  metadata.bind = 设置 MetaData 的“bind”

orm

  • [orm]
    与 0.4 的向前兼容:向 Query 添加了 one(),first()和 all()。几乎所有 0.4 中的 Query 功能在 0.3.9 中都存在,以实现向前兼容。
  • [orm]
    reset_joinpoint()这次真的有效,承诺!允许您从根重新加入:query.join([‘a’,  ‘b’]).filter().reset_joinpoint().join([‘a’, ‘c’]).filter().all()在 0.4  中,所有 join()调用都从“root”开始
  • [orm]
    在 mapper() 构造步骤中添加了同步,以避免在不同线程中编译预先存在的映射器时发生线程冲突
    参考:#613
  • [orm]
    当 Mapper 将两个同名主键列混合成一个属性时,会发出警告。这在映射到连接(或继承)时经常发生。
  • [orm]
    synonym() 属性完全支持所有 Query 的 joining/with_parent 操作
    参考:#598
  • [orm]
    修复了在删除具有 many-to-many uselist=False 关系的项目时的非常愚蠢的错误
  • [orm]
    还记得关于  polymorphic_union 的那些东西吗?用于 joined table inheritance?有趣的是… 对于 joined  table inheritance,你实际上不需要它,你可以通过 outerjoin() 将所有表串在一起。但如果涉及具体表,则 UNION  仍然适用(因为没有东西可以将它们连接起来)。
  • [orm]
    对急加载进行了小修复,以更好地与使用直接“outerjoin”子句的多态映射器的急加载配合使用

sql

  • [sql]
    对于不是默认模式的表的 ForeignKey 需要显式指定模式;即 ForeignKey(‘alt_schema.users.id’)
  • [sql]
    MetaData 现在可以用引擎或 url 作为第一个参数构建,就像 BoundMetaData 一样
  • [sql]
    BoundMetaData 现在已被弃用,MetaData 是直接替代品。
  • [sql]
    DynamicMetaData 已更名为 ThreadLocalMetaData。DynamicMetaData 名称已被弃用,并且是 ThreadLocalMetaData 或者如果 threadlocal=False 则是常规 MetaData 的别名
  • [sql]
    复合主键表示为非键集,以允许由具有相同名称的列组成的复合键;出现在 Join 中。有助于继承场景制定正确的 PK。
  • [sql]
    改进了从连接中获取“正确”和最小一组主键列的能力,将外键和其他等效列等同起来。这主要是为了帮助继承场景制定最佳选择的主键列。
    参考:#185
  • [sql]
    在 Sequence.create()/drop()、ColumnDefault.execute() 中添加了 ‘bind’ 参数
  • [sql]
    可以使用与列名不同的“key”属性在反射表中覆盖列,包括主键列
    参考:#650
  • [sql]
    修复了“模糊列”结果检测,当结果中存在重复列名时
    参考:#657
  • [sql]
    对“列定位”的一些增强,即将一列与另一个可选择的“对应”列匹配的能力。这主要影响 ORM 映射到复杂连接的能力
  • [sql]
    MetaData 和所有 SchemaItems 都可以与 pickle 一起使用。可以将缓慢的表反射转储到 pickle 文件中以供以后重用。只需在解除 pickle 后重新连接引擎到元数据。
    参考:#619
  • [sql]
    向 QueuePool 的“overflow”计算添加了互斥锁,以防止绕过 max_overflow 的竞争条件。
  • [sql]
    修复了复合选择的分组以提供正确的结果。在某些情况下,这将在 sqlite 上中断,但是这些情况无论如何都会产生不正确的结果,sqlite 不支持分组的复合选择。
    参考:#623
  • [sql]
    修复了操作符的优先级,以便正确应用括号
    参考:#620
  • [sql]
    调用.in_()(即不带参数)将返回“CASE WHEN( IS NULL)THEN NULL ELSE 0 END = 1”,以便在所有情况下返回 NULL 或 False,而不是抛出错误。
    参考:#545
  • [sql]
    修复了 select()的“where”/“from”条件,以接受 unicode 字符串以及常规字符串 - 两者都转换为 text()。
  • [sql]
    除了 column.distinct()之外,还添加了独立的 distinct()函数。
    参考:#558
  • [sql]
    result.last_inserted_ids()应返回与表的主键约束大小相同的列表。通过“被动”创建并且不可通过 cursor.lastrowid 获得的值将为 None。
  • [sql]
    长标识符检测修复为使用>而不是>=用于最大标识符长度
    参考:#589
  • [sql]
    修复了 selectable.corresponding_column(selectable.c.col)不返回 selectable.c.col 的错误,如果 selectable 是一个表和涉及相同表的另一个连接的连接。混乱的 ORM 决策制定
    参考:#593
  • [sql]
    在 types.py 中添加了 Interval 类型
    参考:#595

mysql

  • [mysql]
    修复了捕获一些暗示连接已断开的错误
    参考:#625
  • [mysql]
    修复了模运算符的转义
    参考:#624
  • [mysql]
    将‘fields’添加到保留字中
    参考:#590
  • [mysql]
    各种反射增强/修复

sqlite

  • [sqlite]
    重新排列方言初始化,以便及时警告 pysqlite1 过旧。
  • [sqlite]
    sqlite 更好地处理混合匹配各种日期/时间/日期时间列的日期时间对象
  • [sqlite]
    字符串 PK 列插入不会被 OID 覆盖
    参考:#603

mssql

  • [mssql]
    修复了 pyodbc 的端口选项处理
    参考:#634
  • [mssql]
    现在能够反射标识列的起始和增量值
  • [mssql]
    使用 pyodbc 预备支持使用 scope_identity()方法

oracle

  • [oracle]
    日期时间修复:使亚秒级别的时间戳工作,添加了支持仅具有年/月/日的 types.Date 的 OracleDate
    参考:#604
  • [oracle]
    添加了 dialect 标志“auto_convert_lobs”,默认为 True;将导致在结果集中检测到任何 LOB 对象都被强制转换为 OracleBinary,以便 LOB 自动读取,如果没有 typemap 存在(即,如果发出了文本执行())。
  • [oracle]
    mod 运算符‘%’产生 MOD
    参考:#624
  • [oracle]
    当使用 Python 2.3 时,将 cx_oracle datetime 对象转换为 Python datetime.datetime
    参考:#542
  • [oracle]
    修复了 Oracle TEXT 类型中的 Unicode 转换

杂项

  • [ext]
    现在对字典关联代理进行迭代类似于字典,而不是 InstrumentedList(例如,通过键而不是值)
  • [ext]
    关联代理不再紧密绑定到源集合,并且使用 thunk 构造
    参考:#597
  • [ext]
    添加了 selectone_by()方法到 assignmapper
  • [postgres]
    修复了百分号运算符的转义
    参考:#624
  • [postgres]
    添加了对域的反射支持
    参考:#570
  • [postgres]
    在反射期间缺少的类型将解析为 Null 类型,而不是引发错误
  • [postgres]
    上面“schema”中的修复修复了从 alt-schema 表反射到 public schema 表的外键反射

0.3.8

发布日期:2007 年 6 月 2 日星期六

orm

  • [orm]
    在 Query 中添加了  reset_joinpoint()方法,将“连接点”移回起始映射器。0.4 版本将更改  join()方法的行为,以在所有情况下重置“连接点”,因此这是一个临时方法。为了向前兼容,请确保跨多个关系指定的连接使用单个  join()方法,即 join([‘a’, ‘b’, ‘c’])。
  • [orm]
    修复了 query.instances()方法中的一个 bug,该 bug 无法处理多个额外的映射器或一个额外的列。
  • [orm]
    “delete-orphan”不再意味着“delete”。持续努力分离这两个操作的行为。
  • [orm]
    多对多关系正确设置了关联表上删除操作的绑定参数类型
  • [orm]
    多对多关系检查删除操作从关联表中删除的行数是否符合预期结果
  • [orm]
    session.get()和 session.load()方法将**kwargs 传播到查询中
  • [orm]
    修复了允许原始多态联合嵌入到相关子查询中的多态查询
    参考:#577
  • [orm]
    ��复了在与多对多关系一起使用 select_by(=) -style joins 的 bug,引入于 r2556
  • [orm]
    mapper()的“primary_key”参数传播到“polymorphic”映射器。此列表中的主键列被规范化为映射器的本地表的主键。
  • [orm]
    恢复了在 sa.orm.strategies 记录器下记录“延迟加载子句”的日志,在 0.3.7 中被移除
  • [orm]
    改进了对映射到 select()语句的属性的预加载支持;即 eagerloader 更善于定位正确的可选择项以附加其 LEFT OUTER JOIN。

sql

  • [sql]
    _Label 类覆盖 compare_self 以返回其最终对象。意味着,如果你说 someexpr.label(‘foo’) == 5,它会产生正确的“someexpr == 5”。
  • [sql]
    _Label 传播“_hide_froms()”,使标量选择在 FROM 子句方面表现更正常 #574
  • [sql]
    修复了在使用 oid_column 作为排序依据时生成过长名称的问题(oids 在映射器查询中被大量使用)
  • [sql]
    ResultProxy 的显著速度提升,预先缓存 TypeEngine 方言实现,并节省每列的函数调用
  • [sql]
    通过新的 _Grouping 构造将括号应用于子句。使用运算符优先级更智能地将括号应用于子句,提供更清晰的子句嵌套(不会改变放置在其他子句中的子句,即没有‘parens’标志)
  • [sql]
    添加了‘modifier’关键字,类似于 func.,但不添加括号。例如 select([modifier.DISTINCT(…)]) 等。
  • [sql]
    移除了“在 UNION 的一部分的 select 中没有 group by”的限制
    参考:#578

mysql

  • [mysql]
    现在几乎支持所有 MySQL 列类型的声明和反射。添加了 NCHAR、NVARCHAR、VARBINARY、TINYBLOB、LONGBLOB、YEAR
  • [mysql]
    sqltypes.Binary 透传现在始终构建一个 BLOB,避免与非常旧的数据库版本的问题
  • [mysql]
    支持列级别的 CHARACTER SET 和 COLLATE 声明,以及 ASCII、UNICODE、NATIONAL 和 BINARY 简写。

杂项

  • [engines]
    添加了 detach()到 Connection,允许底层 DBAPI 连接从其池中分离,在取消引用/关闭()时关闭而不是被池重用。
  • [engines]
    添加了 invalidate()到 Connection,立即使 Connection 及其底层 DBAPI 连接无效。
  • [firebird]
    将最大标识符长度设置为 31
  • [firebird]
    由于票号#370,supports_sane_rowcount()设置为 False。versioned_id_col 功能在 FB 中不起作用。
  • [firebird]
    一些执行修复
  • [firebird]
    新的关联代理实现,实现了完整的代理到基于列表、字典和集合的关系集合
  • [firebird]
    添加了 orderinglist,一个自定义列表类,将对象属性与该对象在列表中的位置同步
  • [firebird]
    对 SelectResultsExt 进行了小修复,以避免在 select()期间绕过自身。
  • [firebird]
    为 assignmapper 添加了 filter()、filter_by()

orm

  • [orm]
    为 Query 添加了  reset_joinpoint()方法,将“join point”移回起始映射器。0.4 版本将更改  join()的行为,以在所有情况下重置“join point”。为了向前兼容,请确保跨多个关系指定的连接使用单个 join(),即  join([‘a’, ‘b’, ‘c’)。
  • [orm]
    修复了 query.instances()中的 bug,该 bug 无法处理多个额外的映射器或一个额外的列。
  • [orm]
    “delete-orphan”不再意味着“delete”。持续努力分离这两个操作的行为。
  • [orm]
    多对多关系正确设置了关联表上删除操作的绑定参数类型
  • [orm]
    多对多关系检查删除操作从关联表中删除的行数是否符合预期结果
  • [orm]
    session.get() 和 session.load() 将 **kwargs 传播到查询
  • [orm]
    修复了允许原始多态查询嵌入到相关子查询中的多态查询的问题
    参考:#577
  • [orm]
    修复了 select_by(=)风格的连接与多对多关系一起使用时的 bug,该 bug 在 r2556 中引入
  • [orm]
    mapper()的“primary_key”参数传播到“polymorphic”映射器。此列表中的主键列将被规范化为映射器的本地表的主键列。
  • [orm]
    恢复了在 sa.orm.strategies 记录器下记录“lazy loading clause”的功能,该功能在 0.3.7 中被移除
  • [orm]
    改进了对映射到 select()语句的属性的预加载支持;即 eagerloader 更善于定位正确的可选择项以附加其 LEFT OUTER JOIN。

sql

  • [sql]
    _Label 类重写 compare_self 以返回其最终对象。意思是,如果你说 someexpr.label(‘foo’) == 5,它会产生正确的“someexpr == 5”。
  • [sql]
    _Label 传播“_hide_froms()”,使标量选择在 FROM 子句方面表现更正常 #574
  • [sql]
    修复了在使用 oid_column 作为排序依据时生成过长名称的问题(oids 在映射查询中被大量使用)
  • [sql]
    ResultProxy 的显著速度提升,预先缓存 TypeEngine 方言实现并减少每列的函数调用
  • [sql]
    通过新的 _Grouping 结构将括号应用于子句。使用运算符优先级更智能地将括号应用于子句,提供更清晰的子句嵌套(不会改变放置在其他子句中的子句,即没有‘parens’标志)
  • [sql]
    添加了‘modifier’关键字,类似于 func.,但不会添加括号。例如 select([modifier.DISTINCT(…)]) 等。
  • [sql]
    移除了“在 UNION 的一部分的 select 中不允许 group by”的限制
    参考:#578

mysql

  • [mysql]
    现在支持几乎所有 MySQL 列类型的声明和反射。添加了 NCHAR、NVARCHAR、VARBINARY、TINYBLOB、LONGBLOB、YEAR
  • [mysql]
    sqltypes.Binary 透传现在始终构建一个 BLOB,避免与非常旧的数据库版本出现问题
  • [mysql]
    支持列级别的 CHARACTER SET 和 COLLATE 声明,以及 ASCII、UNICODE、NATIONAL 和 BINARY 简写。

其他

  • [engines]
    在 Connection 中添加了 detach(),允许底层的 DBAPI 连接从其池中分离,在取消引用/关闭时关闭,而不是被池重用。
  • [engines]
    在 Connection 中添加了 invalidate(),立即使 Connection 及其底层的 DBAPI 连接无效。
  • [firebird]
    将最大标识符长度设置为 31
  • [firebird]
    由于问题#370,supports_sane_rowcount()设置为 False。versioned_id_col 功能在 FB 中不起作用。
  • [firebird]
    一些执行修复
  • [firebird]
    新的关联代理实现,实现对基于列表、字典和集合的关系集合的完全代理
  • [firebird]
    添加 orderinglist,一个自定义列表类,将对象属性与列表中对象的位置同步
  • [firebird]
    对 SelectResultsExt 进行了小修复,以避免在 select()期间绕过自身。
  • [firebird]
    将 filter()、filter_by()添加到 assignmapper

0.3.7

发布日期:2007 年 4 月 29 日星期日

orm

  • [orm]
    修复了一个严重问题,即在使用 options(eagerload())后,映射器将始终对所有后续的 LIMIT/OFFSET/DISTINCT 查询应用“包装”行为,即使在这些后续查询中没有应用急加载。
  • [orm]
    添加了   query.with_parent(someinstance)方法。使用父实例的延迟连接条件搜索目标实例。接受可选字符串“property”以隔离所需的关系。还添加了静态  Query.query_from_parent(instance, property)版本。
    参考:#541
  • [orm]
    改进了 query.XXX_by(someprop=someinstance)查询,使用类似于 with_parent 的方法,即使用“lazy”子句,防止将远程实例的表添加到 SQL 中,从而使更复杂的条件成为可能
    参考:#554
  • [orm]
    向查询添加了聚合函数的生成版本,例如 sum()、avg()等。通过 query.apply_max()、apply_sum()等使用。#552
  • [orm]
    修复使用 distinct()或 distinct=True 与 join()和类似操作结合时的问题
  • [orm]
    与标签/bindparam 名称生成相对应,急加载器使用 md5 哈希为它们创建的别名生成确定性名称。
  • [orm]
    在给定“set”/“sets.Set”类或子类时,改进/修复了自定义集合类(在惰性加载期间仍在寻找 append()方法)
  • [orm]
    恢复了旧的“column_property()” ORM 函数(以前称为“column()”),以强制将任何列表达式添加为映射器的属性,特别是那些不在映射选择中的列。这允许将任何类型的“标量表达式”添加为关系(尽管它们在急加载方面存在问题)。
  • [orm]
    修复了针对多对多关系定位多态映射器的问题。
    参考:#533
  • [orm]
    在 session.merge() 和结合其使用与 entity_name 方面取得了进展
    参考:#543
  • [orm]
    在继承映射器之间的关系中进行了通常的调整,在这种情况下,建立了到子类映射器的 relation(),其中连接条件来自超类的表

sql

  • [sql]
    结果集列的 keys() 不会小写化,会与 cursor.description 中的表达方式完全一致。请注意,这会导致 Oracle 中的列名全大写。
  • [sql]
    为支持 Unicode 表名、列名和 SQL 语句添加了初步支持,适用于可以支持它们的数据库。到目前为止,与 sqlite 和 postgres 一起工作。MySQL 大部分 可以工作,除了 has_table() 函数无法工作。反射也可以工作。
  • [sql]
    Unicode 类型现在是 String 的直接子类,其中包含所有“convert_unicode”逻辑。这有助于更好地处理在数据库中出现的各种 Unicode 情况,如 MS-SQL,并允许对 Unicode 数据类型进行子类化。
    参考:#522
  • [sql]
    现在可以在 in_() 子句中使用 ClauseElements,如绑定参数等。#476
  • [sql]
    为 CompareMixin 元素实现了反向操作符,允许表达式如“5 + somecolumn”等。#474
  • [sql]
    update()  和 delete() 的“where”条件现在将嵌入式 select() 语句与正在更新或删除的表进行关联。这与嵌套 select()  语句关联的方式相同,并且可以通过嵌入式 select() 上的 correlate=False 标志禁用。
  • [sql]
    现在在编译阶段生成列标签,这意味着它们的长度取决于方言。因此,在 Oracle 上,被截断为 30 个字符的标签将在 postgres 上扩展到 63 个字符。此外,真实的标签名称始终作为父可选择的访问器附加,因此无需关注“截断”的标签名称。
    参考:#512
  • [sql]
    现在列标签和绑定参数“截断”也生成确定性名称,基于它们在编译的完整语句中的顺序。这意味着相同的语句将在应用程序重新启动时产生相同的字符串,并且允许 DB 查询计划缓存更好地工作。
  • [sql]
    当使用子查询时生成的“mini”列标签,用于解决 SQLite 行为不良的问题,不理解“foo.id”等同于“id”,现在仅在从中选择这些命名列的情况下生成
    参考:#513
  • [sql]
    ColumnElement 上的 label()方法将正确地将基本元素的 TypeEngine 传播到标签,包括从 scalar=True select()语句创建的 label()。
  • [sql]
    MS-SQL 更好地检测查询是否为子查询,并知道不为其生成 ORDER BY 短语
    参考:#513
  • [sql]
    修复了 fetchmany()“size”参数在大多数 dbapis 中是位置参数的问题
    参考:#505
  • [sql]
    将 None 作为参数发送给 func.将产生一个 NULL 参数
  • [sql]
    Unicode URL 中的查询字符串的键被编码为 ascii 以进行**kwargs 兼容
  • [sql]
    对原始 execute()更改进行微调,以支持位置参数的元组,而不仅仅是列表
    参考:#523
  • [sql]
    修复了 case()构造,以将第一个 WHEN 条件的类型传播为 case 语句的返回类型

extensions

  • [extensions]
    修复了 AssociationProxy,使得多个 AssociationProxy 对象可以与单个关联集合关联。
  • [extensions]
    根据它们的键(即 name)为 assign_mapper 命名方法 #551

mysql

  • [mysql]
    支持作为 URL 查询字符串内联给出的 SSL 参数,以“ssl_”为前缀,感谢 terjeros@gmail.com。
  • [mysql] []
    mysql 使用“DESCRIBE.”来确定表是否存在,如果表不存在则捕获异常,这支持 unicode 表名以及模式名。已在 MySQL5 上测试,但应该也适用于 4.1 系列。(#557)

sqlite

  • [sqlite]
    移除了 sqlite 将唯一索引反映为主键的愚蠢行为(?!)

mssql

  • [mssql]
    pyodbc 现在是 MSSQL 的首选 DB-API,如果没有明确请求模块,将在模块探测时首先加载。
  • [mssql]
    现在使用@@SCOPE_IDENTITY 而不是@@IDENTITY。此行为可以通过 engine_connect“use_scope_identity”关键字参数覆盖,也可以在 dburi 中指定。

oracle

  • [oracle]
    修复允许对具有 LIMIT/OFFSET 的相同 SELECT 对象进行连续编译的小问题。oracle 方言需要修改对象以具有 ROW_NUMBER OVER,并且在连续编译时未执行完整的步骤。

杂项

  • [engines]
    用于发出警告的警告模块(而不��日志记录)
  • [engines]
    清理所有引擎上的 DBAPI 导入策略
    参考:#480
  • [engines]
    重新设计了引擎内部,减少了复杂性,代码路径数量;将更多状态放在 ExecutionContext 内部,以允许更多方言控制游标处理,结果集。 ResultProxy 完全重构,还有两个用于不同目的的“缓冲”结果集版本。
  • [engines]
    postgres 中的服务器端游标支持完全可用。
    参考:#514
  • [engines]
    改进了自动失效连接的框架,当检测到与该数据库的断开相关的异常时,通过特定于方言的异常检测,整个连接池被丢弃并替换为新实例。#516
  • [engines]
    sqlalchemy.databases 中的方言成为 setuptools 入口点。加载内置数据库方言的方式与以往相同,但如果找不到任何方言,将尝试使用 pkg_resources 加载外部模块。
    参考:#521
  • [engines]
    Engine 包含一个“url”属性,引用 create_engine()使用的 url.URL 对象。
  • [informix]
    添加了 informix 支持!感谢 James Zhang 付出了大量努力。

orm

  • [orm]
    修复了关键问题,即在使用 options(eagerload())后,映射器将始终对所有后续 LIMIT/OFFSET/DISTINCT 查询应用查询“包装”行为,即使在这些后续查询中没有应用急加载。
  • [orm]
    添加了   query.with_parent(someinstance)方法。使用父实例的延迟连接条件搜索目标实例。接受可选字符串“property”以隔离所需的关系。还添加了静态  Query.query_from_parent(instance, property)版本。
    参考:#541
  • [orm]
    改进了 query.XXX_by(someprop=someinstance)查询,使用与 with_parent 类似的方法,即使用“lazy”子句防止将远程实例的表添加到 SQL 中,从而使更复杂的条件成为可能
    参考:#554
  • [orm]
    在查询中添加了聚合函数的生成版本,例如 sum(),avg()等。通过 query.apply_max(),apply_sum()等使用。#552
  • [orm]
    修复了在 join()和类似情况下使用 distinct()或 distinct=True 时的问题
  • [orm]
    对于标签/bindparam 名称生成,急加载器使用 md5 哈希为它们创建的别名生成确定性名称。
  • [orm]
    改进/修复了自定义集合类在给定“set”/“sets.Set”类或子类时(在惰性加载期间仍在寻找 append()方法)
  • [orm]
    恢复了旧的“column_property()”ORM 函数(以前称为“column()”),以强制将任何列表达式添加为映射器的属性,特别是那些在映射的可选择性中不存在的表达式。这允许将任何类型的“标量表达式”添加为关系(尽管它们存在与急加载的问题)。
  • [orm]
    修复了多对多关系定位到多态映射器的问题
    引用:#533
  • [orm]
    在 session.merge() 上取得进展以及将其使用与 entity_name 结合起来
    引用:#543
  • [orm]
    在这种情况下,通常需要调整继承映射器之间的关系,从父类表建立到子类映射器的关系

sql

  • [sql]
    结果集列的 keys() 不会小写化,会与游标描述中的表达完全相同返回。注意这会导致在 Oracle 中 colnames 全部大写。
  • [sql]
    针对可以支持它们的数据库,添加了对 Unicode 表名、列名和 SQL 语句的初步支持。到目前为止,只支持 SQLite 和 postgres。MySQL 基本上可以工作,除了 has_table() 函数无法工作。反射也能工作。
  • [sql]
    Unicode 类型现在是 String 的直接子类,现在包含所有“convert_unicode”逻辑。这有助于更好地处理各种数据库中出现的 Unicode 情况,例如 MS-SQL,并允许 Unicode 数据类型的子类化。
    引用:#522
  • [sql]
    ClauseElements 现在可以在 in_() 子句中使用,例如绑定参数等。#476
  • [sql]
    为 CompareMixin 元素实现了反向操作符,允许表达式如“5 + somecolumn”等。#474
  • [sql]
    update()  和 delete() 的“where”条件现在会将嵌入的 select() 语句与正在更新或删除的表进行关联。这与嵌套的 select()  语句关联方式相同,并且可以通过嵌入式 select() 上的 correlate=False 标志进行禁用。
  • [sql]
    现在列标签在编译阶段生成,这意味着它们的长度是方言相关的。因此,在 Oracle 上被截断为 30 个字符的标签在 postgres 上将扩展到 63 个字符。此外,真实的标签名称始终作为父可选择性的访问器附加,因此不需要注意“截断”的标签名称。
    引用:#512
  • [sql]
    列标签和绑定参数“截断”现在也会基于它们在编译的完整语句中的顺序生成确定性名称。这意味着相同的语句在应用程序重新启动时会产生相同的字符串,并且允许 DB 查询计划缓存工作得更好。
  • [sql]
    当使用子查询时生成的“mini”列标签,用于解决 SQLite 的问题,它不理解“foo.id”等同于“id”,现在仅在从中选择这些命名列的情况下生成
    参考:#513
  • [sql]
    ColumnElement 上的 label()方法将正确地将基本元素的 TypeEngine 传播到标签,包括从 scalar=True select()语句创建的标签。
  • [sql]
    MS-SQL 更好地检测查询是否为子查询,并知道不为其生成 ORDER BY 短语
    参考:#513
  • [sql]
    修复了 fetchmany()中“size”参数在大多数 dbapis 中是位置参数的问题
    参考:#505
  • [sql]
    将 None 作为参数发送给 func.将产生一个 NULL 参数
  • [sql]
    在 unicode URL 中的查询字符串将键编码为 ascii 以进行**kwargs 兼容。
  • [sql]
    对原始 execute()更改进行了轻微调整,以支持元组作为位置参数,而不仅仅是列表
    参考:#523
  • [sql]
    修复了 case()构造以将第一个 WHEN 条件的类型传播为 case 语句的返回类型

扩展

  • [extensions]
    对 AssociationProxy 进行了重大修复,使得多个 AssociationProxy 对象可以与单个关联集合关联。
  • [extensions]
    根据它们的键(即 name)为 assign_mapper 命名方法 #551

mysql

  • [mysql]
    支持作为 URL 查询字符串内联给出的 SSL 参数,以“ssl_”为前缀,感谢 terjeros@gmail.com。
  • [mysql] []
    mysql 使用“DESCRIBE.”来确定表是否存在,如果表不存在则捕获异常,以支持 unicode 表名以及模式名。已在 MySQL5 上测试,但也应该适用于 4.1 系列。(#557)

sqlite

  • [sqlite]
    删除了 silly 行为,其中 sqlite 将唯一索引作为主键的一部分反映出来(?!)

mssql

  • [mssql]
    pyodbc 现在是 MSSQL 的首选 DB-API,如果没有明确请求模块,则将在模块探测时首先加载。
  • [mssql]
    现在使用@@SCOPE_IDENTITY 而不是@@IDENTITY。此行为可以通过 engine_connect“use_scope_identity”关键字参数覆盖,也可以在 dburi 中指定。

oracle

  • [oracle]
    对允许对具有 LIMIT/OFFSET 特性的相同 SELECT 对象进行连续编译的小修复。oracle 方言需要修改对象以具有 ROW_NUMBER OVER,并且在连续编译时未执行完整系列步骤。

杂项

  • [engines]
    用于发出警告的警告模块(而不是日志记录)
  • [engines]
    清理了所有引擎中的 DBAPI 导入策略
    参考:#480
  • [engines]
    引擎内部的重构,减少了复杂性,代码路径数量;将更多状态放在 ExecutionContext 内,以允许更多方言控制游标处理,结果集。ResultProxy 完全重构,并且还有两个用于不同目的的“缓冲”结果集的版本。
  • [引擎]
    服务器端游标支持在 postgres 中完全可用。
    参考:#514
  • [引擎]
    改进了自动失效连接的框架,通过方言特定的异常检测,对应于该数据库的断开相关错误消息。此外,当检测到“连接不再打开”的条件时,整个连接池将被丢弃,并用新实例替换。#516
  • [引擎]
    sqlalchemy.databases 中的方言成为了 setuptools 的入口点。加载内置数据库方言的方式与以往相同,但如果找不到任何方言,将会退回到尝试使用 pkg_resources 加载外部模块。
    参考:#521
  • [引擎]
    Engine 包含一个“url”属性,引用了 create_engine() 使用的 url.URL 对象。
  • [informix]
    informix 支持添加!感谢 James Zhang,他付出了大量努力。


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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(七十)(5)
SqlAlchemy 2.0 中文文档(七十)
29 1
|
4月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(七十)(1)
SqlAlchemy 2.0 中文文档(七十)
28 1
|
4月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(七十)(4)
SqlAlchemy 2.0 中文文档(七十)
44 1
|
4月前
|
SQL 关系型数据库 数据库
SqlAlchemy 2.0 中文文档(七十二)(5)
SqlAlchemy 2.0 中文文档(七十二)
37 1
|
4月前
|
SQL API 数据库
SqlAlchemy 2.0 中文文档(八十)(5)
SqlAlchemy 2.0 中文文档(八十)
35 0
|
4月前
|
SQL 缓存 API
SqlAlchemy 2.0 中文文档(八十)(4)
SqlAlchemy 2.0 中文文档(八十)
32 0
|
4月前
|
SQL 关系型数据库 数据库
SqlAlchemy 2.0 中文文档(八十)(1)
SqlAlchemy 2.0 中文文档(八十)
31 1
|
4月前
|
SQL 算法 数据库管理
SqlAlchemy 2.0 中文文档(五十)(4)
SqlAlchemy 2.0 中文文档(五十)
59 0
|
4月前
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(七十)(2)
SqlAlchemy 2.0 中文文档(七十)
35 0
|
4月前
|
SQL 缓存 关系型数据库
SqlAlchemy 2.0 中文文档(七十二)(3)
SqlAlchemy 2.0 中文文档(七十二)
129 0