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