0.3 变更日志
0.3.11
发布日期:2007 年 10 月 14 日星期日
orm
- [orm]
添加了一个检查,用 join()从 A->B 连接时,沿着两个不同的 m2m 表。这在 0.3 中会引发错误,但在 0.4 中使用别名时是可能的。
参考:#687 - [orm]
修复了 Session.merge()中的小异常抛出 bug - [orm]
修复了映射器的 bug,当链接到一个表没有主键列时,不会检测到连接的表没有主键。 - [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中检测内部‘’字符的 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
misc
- [postgres]
从替代模式反射表时,放在主键上的“default”(通常是序列名称)的“schema”名称无条件引用,因此需要引用的模式名称是可以的。对于不需要引用的模式名称来说,这有点多余但不会有害。 - [firebird]
由于票号#370(正确方式),supports_sane_rowcount()设置为 False。 - [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
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()构造步骤中添加了同步,以避免在不同线程中编译预先存在的映射器时发生线程冲突
参考:#613 - [orm]
当 Mapper 将两个同名主键列混合为单个属性时,会发出警告。这在映射到连接(或继承)时经常发生。 - [orm]
synonym()属性完全受到所有 Query joining/ with_parent 操作的支持
参考:#598 - [orm]
修复了使用 many-to-many uselist=False 关系删除项目时的非常愚蠢的错误 - [orm]
还记得关于多态联合的那些东西吗?用于连接表继承?有趣的是…对于连接表继承,你实际上不需要它,你可以通过 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]
添加了‘bind’参数到Sequence.create()/drop()
,ColumnDefault.execute()
- [sql]
可以使用与列名不同的“key”属性在反射表中重写列,包括主键列。
参考:#650 - [sql]
修复了“模糊列”结果检测,在结果中存在重复列名时
参考:#657 - [sql]
对“column targeting”进行了一些增强,即将列与另一个可选择的“对应”列匹配的能力。这主要影响 ORM 映射到复杂连接的能力。 - [sql]
MetaData
和所有SchemaItems
可安全使用pickle
。可以将缓慢的表反射转储到pickle
文件中以供以后重用。只需在unpickling
后重新连接到元数据的引擎。
参考:#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]
修复了 bug,当 selectable 是表和涉及相同表的另一���连接的连接时,selectable.corresponding_column(selectable.c.col) 不会返回 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]
初步支持使用 scope_identity() 与 pyodbc
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 datetime 对象转换为 Python datetime.datetime
参考:#542 - [oracle]
修复了 Oracle TEXT 类型中的 Unicode 转换
杂项
- [ext]
现在对 dict association proxies 进行迭代时类似于 dict,而不是类似于 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]
添加了 reset_joinpoint()方法到 Query,将“连接点”移回起始映射。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(=)风格的连接与多对多关系结合时的 bug,该 bug 是在 r2556 中引入的 - [orm]
mapper()的“primary_key”参数传播到“polymorphic”映射。此列表中的主键列被规范化为映射的本地表的主键。 - [orm]
恢复了在 sa.orm.strategies 记录器下记录“延迟加载子句”的日志,该日志在 0.3.7 中被删除 - [orm]
改进了对映射到 select()语句的属性进行急加载的支持;即,急加载器更擅长定位正确的可选择项以附加其 LEFT OUTER JOIN。
sql
- [sql]
_Label 类覆盖 compare_self 以返回其最终对象。也就是说,如果你说 someexpr.label(‘foo’) == 5,它会产生正确的“someexpr == 5”。 - [sql]
_Label 传播“_hide_froms()”,使得标量选择在 FROM 子句方面表现更正常 #574 - [sql]
修复了在使用 oid_column 作为排序依据时生成长名称的 bug(在映射查询中大量使用 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]
新的 association proxy 实现,实现对基于列表、字典和集合的关系集合的完整代理 - [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()、query.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()不会小写化,会以与它们在 cursor.description 中的表达方式完全相同的方式返回。请注意,这会导致在 oracle 中 colnames 全部大写。 - [sql]
为支持 Unicode 表名、列名和 SQL 语句添加了初步支持,适用于可以支持它们的数据库。到目前为止,sqlite 和 postgres 可以正常工作。MySQL 大部分 可以工作,除了 has_table()函数无法工作。反射也可以工作。 - [sql]
Unicode 类型现在是 String 的直接子类,其中包含了所有的“convert_unicode”逻辑。这有助于更好地处理像 MS-SQL 这样的数据库中出现的各种 unicode 情况,并允许对 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]
修复了在大多数 dbapis 中 fetchmany() 的 “size” 参数是位置参数的问题
参考:#505 - [sql]
将 None 作为参数传递给 func. 将产生一个 NULL 参数 - [sql]
Unicode URL 中的查询字符串将键编码为 ascii 以进行 **kwargs 兼容 - [sql]
对原始 execute() 更改的微小调整,也支持元组作为位置参数,而不仅仅是列表
参考:#523 - [sql]
修复了 case() 构造的问题,将第一个 WHEN 条件的类型作为 case 语句的返回类型传播
扩展
- [extensions]
修复了 AssociationProxy 的问题,使得多个 AssociationProxy 对象可以与单个关联集合关联。 - [extensions]
根据它们的键(即 name)为 assign_mapper 方法命名
mysql
- [mysql]
支持将 SSL 参数作为内联 URL 查询字符串给出,以“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,并且在连续编译时未执行完整系列步骤。
杂项
- [引擎]
用于发出警告的 warnings 模块(而不是日志记录) - [引擎]
清理所有引擎中的 DBAPI 导入策略
参考:#480 - [引擎]
引擎内部的重构减少了复杂性,代码路径数量;将更多状态放在 ExecutionContext 中,以允许更多方言控制游标处理,结果集。 ResultProxy 完全重构,还有两个用于不同目的的“缓冲”结果集版本。 - [引擎]
postgres 中完全支持服务器端游标
参考:#514 - [引擎]
改进的框架用于自动失效连接,这些连接已丢失其底层数据库,通过特定于方言的检测异常来对应该数据库的断开相关错误消息。此外,当检测到“连接不再打开”条件时,整个连接池将被丢弃并替换为新实例。#516 - [引擎]
sqlalchemy.databases 中的方言成为 setuptools 入口点。加载内置数据库方言的方式与以往相同,但如果找不到任何方言,则会回退尝试使用 pkg_resources 加载外部模块
参考:#521 - [引擎]
引擎包含一个“url”属性,引用 create_engine() 使用的 url.URL 对象。 - [informix]
添加 informix 支持!感谢 James Zhang,他付出了大量努力。
0.3.6
发布日期:2007 年 3 月 23 日 星期五
orm
- [orm]
SelectResults 扩展的全部功能集已合并到 Query 的一组新方法中。这些方法都提供“生成”行为,即复制 Query 并返回一个添加了额外标准的新 Query。新方法包括:
- filter() - 将选择标准应用于查询
- filter_by() - 将“by”样式标准应用于查询
- avg() - 返回给定列上的 avg() 函数
- join() - 加入到属性(或跨属性列表)
- outerjoin() - 类似于 join() 但使用 LEFT OUTER JOIN
- limit()/offset() - 应用基于范围的 LIMIT/OFFSET 访问,即应用 limit/offset:session.query(Foo)[3:5]
- distinct() - 应用 DISTINCT
- list() - 评估标准并返回结果
- Query 的 API 没有进行不兼容的更改,也没有废弃任何方法。现有方法如 select()、select_by()、get()、get_by() 都会立即执行查询并像以前一样返回结果。join_to()/join_via() 仍然存在,尽管生成的 join()/outerjoin() 方法更容易使用。
- [orm]
与 instances()一起使用的多个映射器的返回值现在返回所请求的映射器列表的笛卡尔积,表示为元组的列表。这对应于文档中的行为。为了正确匹配实例,当使用此功能时,“唯一化”被禁用。 - [orm]
Query 具有 add_entity()和 add_column()生成方法。这些方法将在编译时将给定的映射器/类或 ColumnElement 添加到查询中,并将它们应用于 instances()方法。用户负责构建合理的连接条件(否则可能会得到完整的笛卡尔积)。结果集是元组的列表,不唯一。 - [orm]
字符串和列也可以发送到 instances()的*args 中,其中这些确切的结果列将成为结果元组的一部分。 - [orm]
完整的 select()构造可以传递给 query.select()(无论如何都有效),还可以使用 query.selectfirst()、query.selectone(),它们将被直接使用(即,不会编译查询)。与将结果发送到 instances()类似。 - [orm]
急切加载不会对由急切加载器之外的内容放置在选择语句中的“order by”子句进行“别名化”,以修复在中所示的重复列的可能性。然而,这意味着您必须更加小心地处理放置在 Query.select()的“order by”中的列,您必须在您的条件中明确命名它们(即,您不能依赖于急切加载器为您添加它们)
参考:#495 - [orm]
在 Session 中添加了一个方便的多用途“identity_key()”方法,允许为主键值、实例和行生成标识键,感谢 Daniel Miller - [orm]
即使在操作发生在操作的“backref”侧时,也将正确处理多对多表
参考:#249 - [orm]
添加了“refresh-expire”级联。允许刷新()和 expire()调用沿关系传播。
参考:#492 - [orm]
对多态关系进行了更多修复,涉及到对多对一关系到多态映射器的正确延迟子句生成。还修复了“方向”检测,更具体地针对属于多态联合的列与不属于多态联合的列。
参考:#493 - [orm]
当使用“viewonly=True”从其他表中拉取到连接条件中不是关系的父/子映射的其他表时,对关系计算进行了一些修复 - [orm]
在包含对循环链之外的其他实例的引用的循环引用关系上进行了刷新修复,当循环中的某些对象实际上不是刷新的一部分时 - [orm]
对“将 A 对象与 B 集合一起刷新,但是您将 C 放入集合中”的“检查条件”进行了强制性检查 - 即使 C 是 B 的子类,除非 B 的映射器以多态方式加载。否则,集合稍后将加载应为“C”的“B”(因为它不是多态的),这会破坏双向关系(即 C 有其 A,但 A 的反向引用将惰性加载为类型为“B”的不同实例)。此检查将会影响一些未出现问题的人,因此错误消息还将记录一个标志“enable_typechecks=False”,以禁用此检查。但请注意,特别是在没有此检查的情况下,双向关系变得脆弱。
参考:#500
sql
- [sql]
bindparam() 名称现在是可重复的!在单个语句中指定两个不同的 bindparam(),并且名称相同,键将是共享的。适当的位置/命名参数在编译时转换。对于具有冲突名称的绑定参数的“别名”旧行为,请指定“unique=True” - 此选项仍然用于所有自动生成的(基于值的)绑定参数的内部使用。 - [sql]
对绑定参数作为列子句的支持稍微改进,可以通过 bindparam() 或 literal() 实现,例如 select([literal(‘foo’)])。 - [sql]
MetaData 可以通过构造函数的 “url” 或 “engine” kwargs,或使用 connect() 方法绑定到引擎。BoundMetaData 与 MetaData 相同,只是 engine_or_url 参数是必需的。DynamicMetaData 与之相同,并默认提供线程本地连接。 - [sql]
exists() 现在可以作为一个独立的可选择对象使用,而不仅仅是在 WHERE 子句中使用,即 exists([columns], criterion).select()。 - [sql]
相关子查询可以在 ORDER BY、GROUP BY 中使用。 - [sql]
修复了使用显式连接执行函数的功能,即 conn.execute(func.dosomething())。 - [sql]
select() 上的 use_labels 标志不会为文字文本列元素自动创建标签,因为我们无法对文本进行任何假设。要为文字列创建标签,可以说“somecol AS somelabel”,或使用 literal_column(“somecol”).label(“somelabel”)。 - [sql]
当将文字列在其可选择的列集合中“代理”时,对于字面列,不会发生引用(is_literal 标志被传播)。通过 literal_column(“somestring”) 指定文字列。 - [sql]
在 Join.select() 中添加了 “fold_equivalents” 布尔参数,它根据连接条件从结果列子句中删除已知为等效的“重复”列。当构造与 Postgres 抱怨如果存在重复列名的连接子查询时非常有用。 - [sql]
修复了 ForeignKeyConstraint 上的 use_alter 标志。
参考:#503 - [sql]
在 topological.py 中使用了 2.4-only “reversed”的修复用法。
参考:#506 - [sql]
对于黑客,重构了 ClauseElement 和 SchemaItem 的“visitor”系统,以便项的遍历由 ClauseVisitor 本身控制,使用方法 visitor.traverse(item)。accept_visitor() 方法仍然可以直接调用,但不会遍历子项。ClauseElement/SchemaItem 现在有一个可配置的 get_children() 方法,用于返回每个父对象的子元素集合。这允许项的完整��历清晰和明确(以及可记录),并且有一种限制遍历的简单方法(只需传递标志,这些标志由适当的 get_children() 方法捕获)。
参考:#501 - [sql]
当 else_ 参数设置为零时,case 语句现在可以正常工作。
扩展
- [extensions]
SelectResults 上的 options() 方法现在像其他 SelectResults 方法一样实现了“生成”。但无论如何,你现在只会使用 Query。
参考:#472 - [extensions]
query() 方法由 assignmapper 添加。这有助于导航到 Query 上的所有新的生成方法。
mysql
- [mysql]
为 MSString 添加了一个通用的 **kwargs,以帮助反射模糊类型(如 MS 4.0 中的“varchar() binary”) - [mysql]
添加了明确的 MSTimeStamp 类型,当使用 types.TIMESTAMP 时生效。
oracle
- [oracle]
使任何大小输入的二进制工作!cx_oracle 工作正常,是我的错,因为 BINARY 被传递而不是 BLOB 用于 setinputsizes(还有单元测试甚至没有设置输入大小)。 - [oracle]
也修复了在单独的更改集上对 CLOB 的读写。 - [oracle]
auto_setinputsizes 对于 Oracle 默认为 True,修复了它错误地传播错误类型的情况。
杂项
- [ms-sql]
移除了 DATE 列类型上的秒输入(可能
应该完全删除时间) - [ms-sql]
浮点字段中的空值不再引发错误 - [ms-sql]
LIMIT 与 OFFSET 现在会引发错误(MS-SQL 不支持 OFFSET) - [ms-sql]
添加了一个使用 MSSQL 类型 VARCHAR(max) 而不是 TEXT 用于大型无大小字符串字段的功能。使用新的“text_as_varchar”来启用它。
参考:#509 - [ms-sql]
没有 LIMIT 的 ORDER BY 子句现在在子查询中被剥离,因为 MS-SQL 禁止这种用法 - [ms-sql]
清理模块导入代码;可指定的 DB-API 模块;模块偏好的更明确排序。
参考:#480
0.3.5
发布日期:Thu Feb 22 2007
orm
- [orm] [bugs]
另一个重构关系计算。允许更准确的 ORM 行为与来自/到/之间的映射器的关系,特别是多态映射器,还有它们与 Query、SelectResults 的使用。票据包括,。
参考:#439, #441, #448 - [orm] [错误]
删除了在类上指定自定义集合的已弃用方法;现在必须使用“collection_class”选项。旧方法开始在人们使用 assign_mapper()时产生冲突,现在修补了一个“options”方法,与一个名为“options”的关系一起使用。 (关系优先于 monkeypatched assign_mapper 方法)。 - [orm] [错误]
extension()查询选项传播到 Mapper._instance()方法,以便调用所有与加载相关的方法
参考:#454 - [orm] [错误]
继承映射器的急切关系如果关系没有返回任何行也不会失败。 - [orm] [错误]
修复了对多个后代类上的急切关系加载错误
参考:#486 - [orm] [错误]
修复了非常大的拓扑排序问题,感谢 ants.aasma at gmail
参考:#423 - [orm] [错误]
急切加载在检测“自引用”关系时稍微更严格,特别是在多态映射器之间。这导致“急切降级”到延迟加载。 - [orm] [错误]
改进了对嵌入到查询.select()的“where”条件中的复杂查询的支持
参考:#449 - [orm] [错误]
映射器选项如 eagerload()、lazyload()、deferred(),将适用于“synonym()”关系
参考:#485 - [orm] [错误]
修复了级联操作错误地包括已删除的集合项的错误
参考:#445 - [orm] [错误]
修复了当一个一对多子项在单个工作单元中移动到新父项时的关系删除错误
参考:#478 - [orm] [错误]
修复了关系删除错误,其中父/子关系的子项只有一个列作为主键/外键时,如果手动删除或使用“delete”级联而没有使用“delete-orphan”,则会引发“清空主键”错误 - [orm] [错误]
修复了延迟加载,以便在只设置 PK 列属性时不会错误地发生加载操作 - [orm] [增强]
实现了 mapper 的 foreign_keys 参数。与 primaryjoin/secondaryjoin 参数一起使用,以指定/覆盖在 Table 实例上定义的外键。
参考:#385 - [orm] [增强]
contains_eager(‘foo’)自动意味着 eagerload(‘foo’) - [orm] [增强]
添加了 contains_eager()的“alias”参数。使用它来指定查询中用于急切加载的子项的别名的字符串名称或 Alias 实例。比“装饰器”更容易使用 - [orm] [增强]
添加了“contains_alias()”选项,用于将结果集映射到映射表的别名 - [orm] [增强]
添加了对py2.5
“with”语句的支持到SessionTransaction
参考:#468
sql
- [sql]
“case_sensitive”的值现在默认为True
,不管标识符的大小写如何,除非明确设置为False
。这是因为对象可能被标记为其他包含混合大小写的内容,传播“case_sensitive=False”会破坏这一点。在使用标签和“fake”列对象时修复引用的其他问题 - [sql]
添加了一个“supports_execution()”方法到ClauseElement
,以便各种类型的子句可以表达是否适合执行…例如,您可以执行“select”,但不能执行“Table”或“Join”。 - [sql]
修复了对引擎、连接上直接文本execute()
的参数传递。可以处理*args
或列表实例作为位置参数,**kwargs
或字典实例作为命名参数,或列表的列表或字典以调用executemany()
- [sql]
对BoundMetaData
进行了小修复,以接受unicode
或字符串URLs
- [sql]
修复了由andrija at gmail
提供的命名PrimaryKeyConstraint
生成
参考:#466 - [sql]
修复了在列上生成CHECK
约束的问题
参考:#464 - [sql]
修复了tometadata()
操作以传播列和表级别的约束
extensions
- [extensions]
添加了distinct()
方法到SelectResults
。通常只在使用count()
时会有所不同。 - [extensions]
添加了options()
方法到SelectResults
,相当于query.options()
参考:#472 - [extensions]
添加了可选的__table_opts__
字典到ActiveMapper
,将kw
选项发送到Table
对象
参考:#462 - [extensions]
添加了selectfirst()
,selectfirst_by()
到assign_mapper
参考:#467
mysql
- [mysql]
修复了在旧的数据库上反射可能返回“show variables like”语句的array()
类型的问题
mssql
- [mssql]
对pyodbc
的初步支持(耶!)
参考:#419 - [mssql]
添加了对NVARCHAR
类型的更好支持
参考:#298 - [mssql]
修复了pymssql
上的提交逻辑 - [mssql]
修复了带有模式的query.get()
参考:#456 - [mssql]
修复了非整数关系
参考:#473 - [mssql]
现在可以在运行时选择DB-API
模块
参考:#419 - [mssql] [415] [481] [tickets:422]
现在通过了更多的单元测试 - [mssql]
与ANSI
函数更好的单元测试兼容性
参考:#479 - [mssql]
改进了对具有自动插入的隐式序列PK
列的支持
参考:#415 - [mssql]
修复了 adodbapi 中空密码的问题
参考:#371 - [mssql]
修复了使用 pyodbc 时单元测试无法正常工作的问题
参考:#481 - [mssql]
修复了 db-url 查询中的 auto_identity_insert - [mssql]
在 db-url 查询参数中添加了 query_timeout。目前仅适用于 pymssql - [mssql]
已测试通过 pymssql 0.8.0(现在是 LGPL)
oracle
- [oracle]
当将“rowid”作为 ORDER BY 列返回或在 ROW_NUMBER OVER 中使用时,oracle 方言会检查其应用的可选择项,并在不适用时切换到表 PK,即对于 UNION。仍需检查 DISTINCT、GROUP BY(rowid 无效的其他地方)等。允许多态映射正常运行。
参考:#436 - [oracle]
非主键列上的序列将在插入时正确触发 - [oracle]
添加了 PrefetchingResultProxy 支持,以在已知存在时预取 LOB 列,修复了
参考:#435 - [oracle]
实现了基于同义词的表反射,包括跨数据库链接
参考:#379 - [oracle]
当由于某些权限错误而无法反映相关表时,会发出日志警告
参考:#363
杂项
- [postgres]
更好地反映了备用模式表的序列
参考:#442 - [postgres]
非主键列上的序列将在插入时正确触发 - [postgres]
添加了 PGInterval 类型,PGInet 类型
参考:#444, #460
SqlAlchemy 2.0 中文文档(七十)(2)https://developer.aliyun.com/article/1560937