SqlAlchemy-2-0-中文文档-四十六-
SqlAlchemy 2.0 中文文档(四十六)
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’字符的 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]
调用
<column>.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(
=
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?