SqlAlchemy 2.0 中文文档(六十九)(2)https://developer.aliyun.com/article/1560783
0.4.5
发布日期:2008 年 4 月 4 日星期五
ORM
- [ORM]
对 session.merge()行为的微小更改 - 现有对象根据主键属性而不一定是 _instance_key 进行检查。因此,广泛请求的功能是:
x = MyObject(id=1) x = sess.merge(x)
- 如果存在,现在可以加载数据库中具有 id#1 的 MyObject。merge()仍将给定对象的状态复制到持久对象上,因此上述示例通常会将“x”的所有属性的“None”复制到持久副本上。这些可以使用 session.expire(x)来恢复。
- [ORM]
还修复了 merge() 中的行为,合并后集合中存在但合并集合中不存在的集合元素未从目标中删除的问题。 - [orm]
添加了对“未编译的映射器”的更积极的检查,特别有助于声明性层
参考:#995 - [orm]
“primaryjoin”/“secondaryjoin”背后的方法论已经重构。行为应该稍微更智能一些,主要体现在错误消息方面,已经简化为更易读的形式。在少量情况下,它可以比以前更好地解析正确的外键。 - [orm]
添加了 comparable_property(),将查询比较器行为添加到常规的、非托管的 Python 属性 - [orm] [‘machines’] [Company.employees.of_type(Engineer)]
将 query.with_polymorphic() 的功能添加到 mapper() 作为配置选项。
它可以通过几种形式进行设置:
with_polymorphic=’’ with_polymorphic=[mappers] with_polymorphic=(‘’,selectable) with_polymorphic=([mappers],selectable)
这控制了继承映射器的默认多态加载策略。当没有给出可选择项时,将为所有请求的连接表继承映射器创建外连接。请注意,连接的自动创建与具体表继承不兼容。
现有的 mapper() 上的 select_table 标志现在已弃用,并且与 with_polymorphic(’ *',select_table) 等同。请注意,select_table 的底层“要点”已完全删除并替换为更新的、更灵活的方法。
新方法还自动允许对子类进行急切加载,如果它们存在,例如:
sess.query(Company).options(eagerload_all()) • 1
- 加载公司对象、其员工以及偶然是工程师的员工集合的“machines”集合。很快将引入“with_polymorphic”查询选项,该选项允许每个查询对关系上的 with_polymorphic()进行控制。
- [orm]在查询中添加了两个“实验性”功能,“实验性”是因为它们的具体名称/行为尚未确定:_values() 和 _from_self()。我们希望获得对这些功能的反馈。
- _values(*columns) 接收列表达式列表,并返回一个仅返回这些列的新查询。在评估时,返回值是一个元组列表,就像使用 add_column() 或 add_entity() 时一样,唯一的区别是“entity zero”,即映射类,不包含在结果中。这意味着现在终于可以在查询上使用 group_by() 和 having(),直到现在一直没有用。
未来对此方法的更改可能包括删除其连接、过滤和允许与“结果集”无关的其他选项的能力,因此我们寻求的反馈是人们希望如何使用 _values()…即在最后完成后,还是人们更喜欢在调用后继续生成。 - _from_self() 编译 Query 的 SELECT 语句(减去任何急加载器),并返回一个从该 SELECT 选择的新 Query。所以基本上你可以从一个 Query 中查询而不需要手动提取 SELECT 语句。这样做就给了 query[3:5]._from_self().filter(some criterion)这样的操作有意义。这里没有什么争议性的,除了你可以快速创建效率较低的高度嵌套的查询,并且我们希望得到有关命名选择的反馈。
- [orm]
query.order_by() 和 query.group_by() 现在将接受多个参数使用 *args(就像 select() 已经做的那样)。 - [orm]
在 Query 中添加了一些便利描述符:query.statement 返回完整的 SELECT 构造,query.whereclause 只返回 SELECT 构造的 WHERE 部分。 - [orm]
修复/涵盖了使用 False/0 值作为多态判别器时的情况。 - [orm]
修复了一个 bug,该 bug 阻止了同义词(synonym())属性与继承一起使用。 - [orm]
修复了对尾随下划线的 SQL 函数截断
参考:#996 - [orm]
当在挂起的实例上过期属性时,当触发“刷新”操作并且未找到结果时将不会引发错误。 - [orm]
Session.execute 现在可以从元数据中找到绑定 - [orm]
调整了“自引用”的定义,使其成为具有共同父项的任何两个映射器(这会影响与 Query 连接时是否需要 aliased=True)。 - [orm]
对 query.join() 的 “from_joinpoint” 参数进行了一些修正,以便如果前一个连接被别名化,而这个连接没有,则连接仍然成功进行。 - [orm]各种“级联删除”修复:
- 修复了动态关系的“级联删除”操作,在 0.4.2 中该操作仅针对外键置空行为进行了实现,并未实际进行级联删除
- 在 many-to-one 上没有 delete-orphan 级联的 delete 级联将不会删除与父项断开连接的孤立项,直到在父项上调用 session.delete()(one-to-many 已经有了这个)。
- delete 级联与 delete-orphan 将删除孤立项,无论它是否仍附加到已删除的父项。
- 在使用继承时,delete-orphan 级联现在可以正确地检测到存在于超类上的关系。
- 参考:#895
- [orm]
修复了 Query 中 order_by 计算的错误,在使用 select_from()时正确别名 mapper-config 中的 order_by。 - [orm]
将在替换一个集合为另一个集合时启动的差异逻辑重构为 collections.bulk_replace,对于构建多级集合的任何人都很有用。 - [orm]
级联遍历算法从递归转换为迭代,以支持深层对象图。
sql
- [sql]
现在,对架构限定的表将在所有列表达式以及生成列标签时将架构名称放在表名称之前。这样可以防止在所有情况下跨架构名称冲突
参考:#999 - [sql]
现在可以允许选择将所有 FROM 子句相关联且自身没有 FROM 的选择。这些通常在标量上下文中使用,即 SELECT x, (SELECT x WHERE y) FROM table。需要显式 correlate() 调用。 - [sql]
‘name’ 不再是 Column() 的必需构造函数参数。现在可以将其(和 .key)推迟到列添加到表时。 - [sql]
like()、ilike()、contains()、startswith()、endswith() 接受一个可选的关键字参数“escape=”,使用“x LIKE y ESCAPE ‘’”语法设置为转义字符。
参考:#791, #993 - [sql]
random() 现在是一个通用的 SQL 函数,并且将编译为数据库的随机实现(如果有)。 - [sql]
update().values() 和 insert().values() 接受关键字参数。 - [sql]
修复了 select() 中关于其生成 FROM 子句的问题,在罕见情况下,两个子句可能会被生成,而实际上只想取消另一个。一些具有大量急加载的 ORM 查询可能会出现这种症状。 - [sql]
case() 函数现在还接受字典作为其 whens 参数。它还默认将“THEN”表达式解释为值,这意味着 case([(x==y, “foo”)]) 将“foo”解释为绑定值,而不是 SQL 表达式。在这种情况下,对于标准本身,这些只能是文本字符串,除非存在“value”关键字,否则 SA 将强制使用 text() 或 literal()。
mysql
- [mysql]
方言用于缓存服务器设置的连接信息键已更改,并且现在有了命名空间。
mssql
- [mssql]
反射表现在将自动加载被自动加载表中的外键引用的其他表。
参考:#979 - [mssql]
添加了 executemany 检查以跳过标识获取。
参考:#916 - [mssql]
添加了小日期类型的存根。
参考:#884 - [mssql]
为 pyodbc 方言添加了新的 ‘driver’ 关键字参数。如果给出,将替代 ODBC 连接字符串,默认为 ‘SQL Server’。 - [mssql]
为 pyodbc 方言添加了新的 ‘max_identifier_length’ 关键字参数。 - [mssql]
对 pyodbc + Unix 的改进。如果以前无法使该组合工作,请再次尝试。
oracle
- [oracle]
Table 上的 “owner” 关键字现已弃用,并且与 “schema” 关键字完全同义。现在可以在 Table 对象上明确声明或不使用 “schema” 来反射具有替代 “owner” 属性的表。 - [oracle]
所有在表反射期间搜索同义词、DBLINK 等“魔术”功能默认情况下都已禁用,除非在 Table 对象上指定“oracle_resolve_synonyms=True”。解析同义词必然会导致一些混乱的猜测,我们宁愿默认情况下将其排除在外。当设置了标志时,表和相关表将在所有情况下针对同义词进行解析,这意味着如果特定表存在同义词,则在反映相关表时将使用它。这比以前的行为更粘性,这就是为什么默认情况下它是关闭的。
杂项
- [声明式] [扩展]
“synonym”函数现在可以直接与“declarative”一起使用。使用“descriptor”关键字参数传递装饰的属性,例如:somekey = synonym(‘_somekey’, descriptor=property(g, s)) - [声明式] [扩展]
“deferred”函数可与“declarative”一起使用。最简单的用法是一起声明 deferred 和 Column,例如:data = deferred(Column(Text)) - [声明式] [扩展]
Declarative 还获得了@synonym_for(…)和@comparable_using(…),这是 synonym 和 comparable_property 的前端。 - [声明式] [扩展]
在使用 declarative 时改进 mapper 编译;已经编译的 mapper 在使用时仍会触发其他未编译的 mapper 的编译
参考:#995 - [声明式] [扩展]
Declarative 将为缺少名称的 Columns 完成设置,允许更 DRY 的语法。
class Foo(Base):
tablename = ‘foos’ id = Column(Integer, primary_key=True)
- [声明式] [扩展]
在 declarative 中,通过将“inherits=None”发送到 mapper_args 可以禁用继承。 - [声明式] [扩展]
declarative_base()接受可选的 kwarg“mapper”,这是任何可调用/类/方法,可以生成一个 mapper,比如 declarative_base(mapper=scopedsession.mapper)。这个属性也可以在单独的 declarative 类上使用“mapper_cls”属性进行设置。 - [postgres]
将 PG 服务器端游标恢复正常,作为默认测试套件的一部分添加了固定的单元测试。为游标 ID 添加了更好的唯一性
参考:#1001
orm
- [orm]
对 session.merge()的行为进行了一点改变 - 现有对象是基于主键属性而不一定是 _instance_key 进行检查的。因此,广泛请求的功能,即:
x = MyObject(id=1) x = sess.merge(x)
- 实际上,如果存在,将从数据库中加载具有 id#1 的 MyObject,现在可用。merge()仍将给定对象的状态复制到持久对象上,因此像上面的示例通常会将“x”的所有属性的“None”复制到持久副本上。这些可以使用 session.expire(x)来恢复。
- [orm]
修复了 merge()中的行为,即目标上存在但合并集合中不存在的元素未从目标中删除。 - [orm]
添加了对“未编译的映射器”更积极的检查,特别有助于声明层
参考:#995 - [orm]
“primaryjoin”/“secondaryjoin”背后的方法已经重构。行为应该稍微更智能,主要是在错误消息方面,已经简化为更易读。在少数情况下,它可以比以前更好地解析正确的外键。 - [orm]
添加 comparable_property(),将查询比较器行为添加到常规的、未管理的 Python 属性 - [orm] [‘machines’] [Company.employees.of_type(Engineer)]
query.with_polymorphic()的功能已添加到 mapper()作为配置选项。
它通过几种形式设置:
with_polymorphic=‘*’ with_polymorphic=[mappers] with_polymorphic=(’ * ', selectable) with_polymorphic=([mappers], selectable)
这控制了继承映射器的默认多态加载策略。当没有给出可选择项时,将为所有请求的连接表继承映射器创建外连接。请注意,连接的自动创建与具体表继承不兼容。
现有的 mapper()上的 select_table 标志现在已被弃用,并与 with_polymorphic(’ * ', select_table)同义。请注意,select_table 的底层“内部”已被完全删除,并替换为更新更灵活的方法。
新方法还自动允许对子类进行急加载,如果存在的话,例如:
sess.query(Company).options(eagerload_all()) • 1
- 加载 Company 对象、它们的员工以及恰好是工程师的员工的“machines”集合。很快还应该引入一个“with_polymorphic”Query 选项,它将允许对关系上的 with_polymorphic()进行每个 Query 的控制。
- [orm]在 Query 中添加了两个“实验性”功能,“实验性”是因为它们的具体名称/行为尚未最终确定:_values()和 _from_self()。我们希望得到这些的反馈。
- _values(*columns)给出一个列表达式列表,并返回一个仅返回这些列的新 Query。在评估时,返回值是一个元组列表,就像使用 add_column()或 add_entity()时一样,唯一的区别是结果中不包括“实体零”,即映射类。这意味着现在终于可以在 Query 上使用 group_by()和 having(),这些功能一直无用至今。
对该方法的未来更改可能包括删除其加入、过滤和允许其他与“结果集”无关的选项的能力,因此我们寻求的反馈是人们如何想要使用 _values()…即在最后,还是人们更喜欢在调用后继续生成。 - _from_self()编译 Query 的 SELECT 语句(减去任何急加载器),并返回一个新的 Query,从该 SELECT 中选择。因此,您可以从一个 Query 中查询而无需手动提取 SELECT 语句。这使得像 query[3:5]._from_self().filter(some criterion)这样的操作具有意义。这里没有太多争议,除了您可以快速创建效率较低的高度嵌套查询,我们希望得到有关命名选择的反馈。
- [orm]
query.order_by()和 query.group_by()将接受使用*args 的多个参数(就像 select()已经做的那样)。 - [orm]
在 Query 中添加了一些便利描述符:query.statement 返回完整的 SELECT 结构,query.whereclause 仅返回 SELECT 结构中的 WHERE 部分。 - [orm]
修复了在使用 False/0 值作为多态鉴别器时的情况。 - [orm]
修复了阻止使用继承的 synonym()���性的错误。 - [orm]
修复了 SQL 函数截断尾随下划线。
参考:#996 - [orm]
当挂起实例上的属性过期时,在触发“refresh”操作并且没有找到结果时不会引发错误。 - [orm]
Session.execute 现在可以从元数据中找到绑定 - [orm]
调整了“自引用”的定义,即任何具有共同父级的两个映射器(这会影响是否在与 Query 连接时需要 aliased=True)。 - [orm]
对 query.join()中的“from_joinpoint”参数进行了一些修复,以便如果前一个连接被别名化而当前连接没有,连接仍然成功进行。 - [orm]各种“级联删除”修复:
- 修复了动态关系的“级联删除”操作,该操作在 0.4.2 版本中仅实现了外键空值行为,而不是实际的级联删除。
- 在多对一关系上没有设置级联删除或者孤儿级联时,将不会删除那些在调用父对象的 session.delete()之前与父对象断开连接的孤儿对象(一对多已经具备此功能)。
- 设置了级联删除和孤儿删除时,无论孤儿对象是否仍然与已删除的父对象相关联,都将删除孤儿对象。
- 在使用继承时,能够正确检测到存在于超类上的关系的级联删除。
- 参考:#895
- [orm]
修复了 Query 中 order_by 计算的问题,当使用 select_from()时,正确别名映射器配置的 order_by。 - [orm]
重构了在用另一个集合替换一个集合时触发的差异逻辑为 collections.bulk_replace,对于构建多级集合的任何人都很有用。 - [orm]
将级联遍历算法从递归转换为迭代,以支持深层对象图。
sql
- [sql]
在架构限定的表中,现在将在所有列表达式以及生成列标签时将架构名放在表名之前。这样可以在所有情况下防止跨架构名称冲突。
参考:#999 - [sql]
现在可以允许选择将所有 FROM 子句相关联并且自身没有 FROM 的情况。这些通常在标量上下文中使用,即 SELECT x, (SELECT x WHERE y) FROM table。需要显式的 correlate() 调用。 - [sql]
‘name’ 不再是 Column() 的必需构造函数参数。现在可以延迟直到将列添加到 Table 时(以及 .key)。 - [sql]
like()、ilike()、contains()、startswith()、endswith() 接受一个可选的关键字参数“escape=”,该参数被设置为使用语法“x LIKE y ESCAPE ‘’”的转义字符。
参考:#791, #993 - [sql]
random() 现在是一个通用的 SQL 函数,并且将编译为数据库的随机实现(如果有)。 - [sql]
update().values() 和 insert().values() 接受关键字参数。 - [sql]
修复了 select() 中关于生成 FROM 子句的问题,在罕见情况下可能会产生两个子句,而本意是取消对方。一些具有大量急加载的 ORM 查询可能会看到此症状。 - [sql]
case() 函数现在还接受字典作为其 whens 参数。它还默认将“THEN”表达式解释为值,这意味着 case([(x==y, “foo”)]) 将“foo”解释为绑定值,而不是 SQL 表达式。在这种情况下,使用 text(expr) 来获取字面 SQL 表达式。对于标准本身,这些只能是字面字符串,如果“value”关键字不存在,那么 SA 将强制明确使用 text() 或 literal()。
mysql
- [mysql]
方言用于缓存服务器设置的连接.info 键已更改,并且现在有命名空间。
mssql
- [mssql]
反映的表现在将自动加载由自动加载表中的外键引用的其他表。
参考:#979 - [mssql]
添加了 executemany 检查以跳过标识获取。
参考:#916 - [mssql]
为小日期类型添加了存根。
参考:#884 - [mssql]
为 pyodbc 方言添加了一个新的‘driver’关键字参数。如果给定,将替换为 ODBC 连接字符串,默认为‘SQL Server’。 - [mssql]
为 pyodbc 方言添加了一个新的‘max_identifier_length’关键字参数。 - [mssql]
对 pyodbc + Unix 进行了改进。如果以前无法使该组合工作,请再试一次。
oracle
- [oracle]
Table 上的“owner”关键字现已弃用,与“schema”关键字完全同义。现在可以在 Table 对象上明确声明或不使用“schema”来反映具有备用“owner”属性的表。 - [oracle]
除非在 Table 对象上指定了“oracle_resolve_synonyms=True”,否则默认情况下,表反射期间所有搜索同义词、DBLINK 等的“魔术”都将被禁用。解析同义词必然会导致一些混乱的猜测,我们宁愿默认不使用。当设置了标志时,表和相关表将在所有情况下解析同义词,这意味着如果特定表存在同义词,则在反映相关表时将使用它。这比以前的行为更具黏性,因此默认情况下关闭了它。
杂项
- [声明式] [扩展]
现在“synonym”函数直接可用于“声明式”。使用“descriptor”关键字参数传递装饰的属性,例如:somekey = synonym(‘_somekey’, descriptor=property(g, s))
- [声明式] [扩展]
“deferred”函数可与“声明式”一起使用。最简单的用法是一起声明延迟和列,例如:data = deferred(Column(Text))
- [声明式] [扩展]
声明式还增加了@synonym_for(…)
和@comparable_using(…)
,这是同义词和可比较属性的前端。 - [声明式] [扩展]
在使用声明式时,对映射器编译进行了改进;已编译的映射器在使用时仍会触发其他未编译的映射器的编译
参考:#995 - [声明式] [扩展]
声明式将为缺少名称的列完成设置,允许更加 DRY 的语法。
class Foo(Base):
__tablename__ = ‘foos’ id = Column(Integer, primary_key=True)
- [声明式] [扩展]
在声明式中,当将“inherits=None”发送到__mapper_args__
时,可以禁用继承。 - [声明式] [扩展]
declarative_base()
接受可选参数“mapper”,它是任何可调用的函数/类/方法,用于生成一个映射器,例如declarative_base(mapper=scopedsession.mapper)
。这个属性也可以在单独的声明类中使用“mapper_cls”属性设置。 - [PostgreSQL]
使 PG 服务器端游标恢复正常,将固定单元测试添加到默认测试套件中。为游标 ID 添加了更好的唯一性
参考:#1001
0.4.4
发布日期:Wed Mar 12 2008
ORM
- [ORM]
any()
,has()
,contains()
,~contains()
, 属性级别的==
和!=
现在与自引用关系正常工作 - EXISTS 中的子句在“远程”一侧进行别名处理,以区别于父表。这适用于单表自引用以及基于继承的自引用。 - [ORM]
修复了在关系()级别使用 == 和 != 操作符与 NULL 比较时的行为,用于一对一关系
参考:#985 - [ORM]
修复了一个 bug,即在由 select_table 映射的多态映射实例上,session.expire() 属性未加载。 - [ORM]
添加了 query.with_polymorphic() - 指定了从基类继承的类列表,这些类将被添加到查询的 FROM 子句中。允许子类在 filter() 条件中使用,以及急切加载这些子类的属性。 - [orm]
你的呼声已经被听到:使用 delete-orphan 从属性或集合中移除一个待处理项会将该项从会话中清除;不会引发 FlushError。请注意,如果你显式地 session.save() 了待处理项,那么属性/集合的移除仍会将其排除在外。 - [orm]
当在会话中调用 session.refresh() 和 session.expire() 时,对于不在会话中的实例会引发错误。 - [orm]
修复了当使用 join() 生成多个 Query 对象时可能出现的生成性 bug。 - [orm]
修复了在 0.4.3 中引入的 bug,当使用默认的“select” polymorphic_fetch 时,加载已经持久化的实例映射到连接表继承时,会触发一个无用的从其连接表中加载的“secondary”加载。这是由于属性在第一次加载时被标记为过期,并且在之前的“secondary”加载中没有被标记为未过期。根据任何加载或提交操作成功后在 dict 中的存在情况,现在会取消属性的过期标记。 - [orm]
弃用了 Query 方法 apply_sum()、apply_max()、apply_min()、apply_avg()。更好的方法学正在到来…… - [orm]
relation() 可以接受一个可调用对象作为其第一个参数,该可调用对象返回要关联的类。这是为了帮助声明性包在类尚未就位时定义关系。 - [orm]
添加了一个新的“更高级”的操作符称为“of_type()”:在 join() 中以及与 any() 和 has() 一起使用,限定将在过滤条件中使用的子类,例如:
query.filter(Company.employees.of_type(Engineer).
any(Engineer.name==’foo’))
或
query.join(Company.employees.of_type(Engineer)).
filter(Engineer.name==’foo’)
- [orm]
针对 flush() 中潜在的丢失引用 bug 的预防性代码。 - [orm]
在 filter()、filter_by() 和其他表达式中使用时,如果它们使用从关系生成的子对象的标识(例如,filter(Parent.child==)),则在执行时评估 的实际主键值,以便 Query 的 autoflush 步骤可以完成,从而在 是待处理状态时填充 的 PK 值。 - [orm]
将关系()-级别的 order by 设置为“secondary”表中的列现在可以与急切加载一起使用,以前的“order by”不会针对 secondary 表的别名进行别名处理。 - [orm]
现在,存在于现有描述符之上的同义词现在是这些描述符的完整代理。
sql
- [sql]
可以再次对文本 FROM 子句创建选择的别名。
参考:#975 - [sql]
bindparam() 的值可以是一个可调用对象,这样在语句执行时它会被评估以获取值。 - [sql]
添加了结果集获取的异常包装/重连支持。重新连接适用于在结果集期间引发可捕获数据错误的数据库(例如 MySQL 上不起作用)
参考:#978 - [sql]
实现了“线程本地”引擎的两阶段 API,通过 engine.begin_twophase(),engine.prepare()
参考:#936 - [sql]
修复了一个阻止 UNION 可克隆的错误。
参考:#986 - [sql]
在 insert()、update()、delete() 和 DDL() 中添加了“bind”关键字参数。这些语句上现在也可以分配 .bind 属性。 - [sql]
现在可以在 INSERT 和 INTO 之间编译带有额外“前缀”单词的插入语句,用于供应商扩展,如 MySQL 的 INSERT IGNORE INTO table。
扩展
- [extensions]
添加了一个新的超小型“声明式”扩展,它允许在类声明下方内联地进行 Table 和 mapper() 配置。该扩展与 ActiveMapper 和 Elixir 不同之处在于它完全不重新定义任何 SQLAlchemy 语义;字面 Column、Table 和 relation() 构造用于定义类行为和表定义。
杂项
- [dialects]
无效的 SQLite 连接 URL 现在会引发错误。 - [dialects]
postgres TIMESTAMP 现在可以正确呈现
参考:#981 - [dialects]
postgres 的 PGArray 默认是一个“可变”类型;当与 ORM 一起使用时,使用可变风格的相等性/写时复制技术来检测更改。
orm
- [orm]
any()、has()、contains()、~contains()、属性级别的 == 和 != 现在可以与自引用关系正常工作 - 存在子句在“远程”侧上别名以区分它与父表。这适用于单表自引用以及基于继承的自引用。 - [orm]
在与 NULL 比较一对一关系的 relation() 级别时,== 和 != 操作符的行为已修复。
参考:#985 - [orm]
修复了一个错误,该错误使 session.expire() 属性在由 select_table 映射的多态映射实例上加载时无法正常工作。 - [orm]
添加了 query.with_polymorphic() - 指定了从基类继承的类列表,这些类将被添加到查询的 FROM 子句中。允许在 filter() 条件中使用子类,并且可以急切地加载这些子类的属性。 - [orm]
你们的呼声已经被听到:使用 delete-orphan 从属性或集合中删除待处理项会从会话中删除该项;不会引发 FlushError。请注意,如果您显式 session.save() 待处理项,属性/集合的移除仍然会将其排除。 - [orm]
当在会话中调用 session.refresh()和 session.expire()时,如果调用的实例不在会话中持久化,则会引发错误。 - [orm]
修复了当使用相同的 Query 生成多个使用 join()的 Query 对象时可能出现的生成性 bug。 - [orm]
修复了在 0.4.3 版本中引入的一个 bug,即在使用默认的“select” polymorphic_fetch 时,加载一个已经持久化的实例,该实例映射到了联合表继承,会触发一个无用的来自其联合表的“secondary”加载。这是因为属性在第一次加载时被标记为过期,并且在之前的“secondary”加载中没有被取消标记。现在,属性在任何加载或提交操作成功后基于 dict 中的存在而被取消过期。 - [orm]
废弃了 Query 方法 apply_sum()、apply_max()、apply_min()、apply_avg()。更好的方法正在到来…… - [orm]
relation()可以接受��个可调用对象作为其第一个参数,该可调用对象返回要关联的类。这是为了帮助声明性包在没有类的情况下定义关系。 - [orm]
添加了一个名为“of_type()”的新的“更高级”运算符:在 join()中使用,以及与 any()和 has()一起使用,用于限定将在过滤条件中使用的子类,例如:
query.filter(Company.employees.of_type(Engineer).
any(Engineer.name==’foo’))
或
query.join(Company.employees.of_type(Engineer)).
filter(Engineer.name==’foo’)
- [orm]
针对 flush()中潜在的丢失引用 bug 进行了预防性代码编写。 - [orm]
在 filter()、filter_by()等中使用的表达式,当它们使用从关系生成的子对象的标识(例如,filter(Parent.child==))生成的子句时,在执行时评估的实际主键值,以便 Query 的自动刷新步骤可以完成,从而在处于挂起状态时填充的 PK 值。 - [orm]
将关系()-级别的 order by 设置为“secondary”表中的列现在可以与急加载一起使用,以前,“order by”没有针对 secondary 表的别名进行别名处理。 - [orm]
现在,对现有描述符进行的同义词代理是对这些描述符的完全代理。
sql
- [sql]
可以再次对文本 FROM 子句的选择创建别名。
参考:#975 - [sql]
bindparam()的值可以是可调用的,这样在语句执行时会评估它以获取值。 - [sql]
为结果集获取添加了异常包装/重新连接支持。重新连接适用于在结果集期间引发可捕获数据错误的数据库(即在 MySQL 上不起作用)。
参考:#978 - [sql]
实现了“threadlocal”引擎的两阶段 API,通过 engine.begin_twophase()、engine.prepare()
参考:#936 - [sql]
修复了阻止 UNIONS 可克隆的 bug。
参考:#986 - [sql]
在 insert()、update()、delete()和 DDL()中添加了“bind”关键字参数。现在这些语句上的.bind 属性也是可分配的,就像在 select()上一样。 - [sql]
现在可以在 INSERT 和 INTO 之间编译带有额外“前缀”单词的插入语句,用于供应商扩展,如 MySQL 的 INSERT IGNORE INTO table。
扩展
- [扩展]
新增了一个超小型的“声明式”扩展,允许在类声明下方内联进行 Table 和 mapper()配置。该扩展与 ActiveMapper 和 Elixir 不同,它根本不重新定义任何 SQLAlchemy 语义;直接使用字面 Column、Table 和 relation()构造来定义类行为和表定义。
杂项
- [方言]
无效的 SQLite 连接 URL 现在会引发错误。 - [方言]
postgres TIMESTAMP 现在正确呈现
参考:#981 - [方言]
postgres PGArray 默认是“可变”类���;在与 ORM 一起使用时,使用可变风格的相等性/写时复制技术来测试更改。
0.4.3
发布日期:2008 年 2 月 14 日 星期四
通用
- [通用]
修复了一系列隐藏的以及一些不那么隐藏的 Python 2.3 兼容性问题,感谢对在 2.3 上运行完整测试套件的新支持。 - [通用]
现在警告被作为类型异常 SAWarning 发出。
orm
- [orm]
每个 Session.begin()现在必须伴随相应的 commit()或 rollback(),除非会话已通过 Session.close()关闭。这也包括使用 transactional=True 创建的会话隐含的 begin()。这里引入的最大变化是,当使用 transactional=True 创建的会话在 flush()期间引发异常时,必须调用 Session.rollback()或 Session.close()才能使该会话在异常后继续。 - [orm]
修复了在合并具有 backref 集合的瞬时实体时出现的 merge()集合翻倍错误。
参考:#961 - [orm]
merge(dont_load=True)不接受瞬时实体,这与 merge(dont_load=True)不接受任何“脏”对象的事实一致。 - [orm]
添加了由 scoped_session 生成的独立“query”类属性。这提供了 MyClass.query,而不使用 Session.mapper。通过以下方式使用:
MyClass.query = Session.query_property()
- [orm]
当尝试在没有会话的情况下访问过期实例属性时,会引发适当的错误消息。 - [orm]
dynamic_loader() / lazy=”dynamic”现在以与 relation()相同的方式接受和使用 order_by 参数。 - [orm]
添加了 expire_all()方法到 Session。调用 expire()以使所有持久实例过期。这在与…结合使用时非常方便。 - [orm]
部分或完全过期的实例在常规 Query 操作期间将其过期属性填充,影响那些对象,防止每个实例需要不必要的第二个 SQL 语句。 - [orm]
动态关系在被引用时会创建对父对象的强引用,以便查询仍然有一个父对象可以调用,即使父对象仅在单个表达式范围内创建(并且在其他情况下取消引用)。
参考:#938 - [orm]
添加了一个 mapper()标志“eager_defaults”。当设置为 True 时,在 INSERT 或 UPDATE 操作期间生成的默认值会立即后获取,而不是延迟到以后。这模仿了旧的 0.3 行为。 - [orm]
query.join()现在可以接受类映射属性作为参数。这些可以用于替代字符串或任何组合。特别是这允许在多态关系上构建到子类的连接,即:
query(Company).join([‘employees’, Engineer.name])
- [orm] [(‘employees’] [Engineer.name] [people.join(engineer))]
query.join()还可以接受属性名/某些可选择的元组作为参数。这允许构建从多态关系的子类连接,即:
query(Company).join(
)
- [orm]
对 join()的行为进行了一般性改进,与多态映射器一起使用时,即从/到多态映射器进行连接并正确应用别名。 - [orm]
当映射器确定映射连接的自然“主键”时,它将更有效地减少通过外键关系等效的列。这影响了需要发送给 query.get()的参数数量,等等。
参考:#933 - [orm]
惰性加载器现在可以处理一个连接条件,其中“绑定”列(即将父 id 作为绑定参数发送的列)在连接条件中出现多次。具体来说,这允许了包含父相关子查询的 relation()的常见任务,比如“仅选择最近的子项”。
参考:#946 - [orm]
修复了多态继承中的错误,当基本多态 _on 列与继承映射器的本地可选择中的任何列不对应时,会引发不正确的异常,超过一级深度 - [orm]
修复了多态继承中的错误,使得在多态映射器上设置一个有效的“order_by”变得困难。 - [orm]
修复了 Query 中一个较昂贵的调用,减缓了多态查询的速度。 - [orm]
如果需要,”被动默认值”和其他“内联”默认值现在可以在 flush()调用期间加载;特别是,这允许构建 relations(),其中外键列引用服务器端生成的非主键列。
参考:#954 - [orm]附加的会话事务修复/更改:
- 修复了会话事务管理的错误:在向嵌套事务添加连接时,没有在连接上启动父事务。
- session.transaction 现在始终指代最内层的活动事务,即使在会话事务对象上直接调用 commit/rollback 也是如此。
- 现在可以准备两阶段事务。
- 当一个连接上的两阶段事务准备失败时,所有连接都会回滚。
- 当使用嵌套事务时,session.close()没有关闭所有事务。
- rollback()之前错误地将当前事务直接设置为可回滚到的事务的父事务。现在它回滚到可以处理它的下一个事务,但将当前事务设置为其父事务,并使之间的事务无效。无效的事务只能回滚或关闭,任何其他调用都会导致错误。
- 对于 commit(),autoflush 没有对简单的子事务进行刷新。
- unitofwork flush 在会话不在事务中且提交事务失败时没有关闭失败的事务。
sql
- [sql]
添加了“schema.DDL”,一条可执行的自由形式 DDL 语句。DDL 可以单独执行,也可以附加到 Table 或 MetaData 实例上,在创建和/或删除这些对象时自动执行。 - [sql]
可以使用‘useexisting=True’标志覆盖表的列和约束,该表已经存在(例如已经反映的表),现在还考虑了与其一起传递的参数。 - [sql]
添加了基于可调用的 DDL 事件接口,在 Tables 和 MetaData 创建和删除之前和之后添加钩子。 - [sql]
在 delete()和 update()构造中添加了 generative where()方法,该方法返回一个通过 AND 连接到现有条件的新对象,就像 select().where()一样。 - [sql]
向列操作添加了“ilike()”操作符。在 postgres 上编译为 ILIKE,在其他所有数据库上为 lower(x) LIKE lower(y)。
引用:#727 - [sql]
添加了“now()”作为通用函数;在 SQLite、Oracle 和 MSSQL 上编译为“CURRENT_TIMESTAMP”;在其他所有数据库上是“now()”。
引用:#943 - [sql]
startswith()、endswith()和 contains()操作符现在在 SQL 中将通配符操作符与给定操作数连接起来,即在所有情况下都是“’%’ || ”,适当地接受 text(‘something’)操作数
引用:#962 - [sql]
cast()适当地接受 text(‘something’)和其他非文字操作数
引用:#962 - [sql]
修复了结果代理中匿名生成的列标签无法使用其直接字符串名称访问的错误 - [sql]
现在可以定义可延迟的约束。 - [sql]
在 select()和 text()中添加了“autocommit=True”关键字参数,以及 select()上的生成 autocommit()方法;对于通过某些用户定义的方式修改数据库的语句,而不是通常的 INSERT/UPDATE/DELETE 等。如果没有进行事务,则此标志将在执行期间启用“autocommit”行为。
参考:#915 - [sql]
可选择上的“.c.”属性现在为其列子句中的每个列表达式添加一个条目。以前,“未命名”列(如函数和 CASE 语句)没有放在那里。现在,如果没有“名称”可用,它们将使用其完整字符串表示��� - [sql]
CompositeSelect,即任何 union(),union_all(),intersect()等现在断言每个可选择包含相同数量的列。这符合相应的 SQL 要求。 - [sql]
为否则未标记的函数和表达式生成的匿名“标签”现在在编译时向外传播,例如 select([select([func.foo()])])的表达式。 - [sql]
基于上述思想,CompositeSelects 现在根据第一个可选择中存在的名称构建其“.c.”集合;corresponding_column()现在对所有嵌入式可选择完全有效。 - [sql]
Oracle 和其他数据库现在正确编码用于默认值(如序列等)的 SQL,即使没有使用 unicode 标识符,因为标识符准备器可能返回缓存的 unicode 标识符。 - [sql]
现在左侧表达式中的列和子句与 datetime 对象的比较现在可以工作(d < table.c.col)。 (RHS 上的 datetimes 一直有效,LHS 的异常是 datetime 实现的怪癖。)
杂项
- [dialects]
在 SQLite 中对模式(通过 ATTACH DATABASE … AS name 链接)的支持更好。在过去的一些情况下,SQLite 生成的 SQL 中省略了模式名称。现在不再这样。 - [dialects]
SQLite 上的 table_names 现在也会选择临时表。 - [dialects]
在反射操作期间自动检测未指定的 MySQL ANSI_QUOTES 模式,支持在中途更改模式。如果没有使用反射,则仍然需要手动设置模式。 - [dialects]
修复了 SQLite 上 TIME 列的反射。 - [dialects]
最终在 postgres 中添加了 PGMacAddr 类型
参考:#580 - [dialects]
在 Firebird 下反映与主键字段关联的序列(通常具有 BEFORE INSERT 触发器)。 - [dialects]
当生成 LIMIT/OFFSET 子查询时,Oracle 会组装结果集列映射中的正确列,即使长名称截断启动也允许列正确映射到结果集
参考:#941 - [dialects]
MSSQL 现在在 _is_select 正则表达式中包含 EXEC,这应该允许使用返回行的存储过程。 - [方言]
MSSQL 现在包含了使用 ANSI SQL row_number() 函数的 LIMIT/OFFSET 的实验性实现,因此需要 MSSQL-2005 或更高版本。要启用此功能,请在 connect 的关键字参数中添加 “has_window_funcs”,或在 dburi 查询参数中添加 “?has_window_funcs=1”。 - [扩展]
更改了 ext.activemapper 以使用非事务性会话进行对象存储。 - [扩展]
修复了关联代理列表上的 “[‘a’] + obj.proxied” 二进制操作的输出顺序。
通用
- [通用]
修复了一系列隐藏的以及一些不那么隐藏的 Python 2.3 兼容性问题,感谢对在 2.3 上运行完整测试套件的新支持。 - [通用]
现在警告被作为异常类型 SAWarning 发出。
ORM
- [ORM]
每个 Session.begin() 现在必须伴随着相应的 commit() 或 rollback(),除非会话被 Session.close() 关闭。这也包括了对于使用 transactional=True 创建的会话隐含的 begin()。这里引入的最大变化是,当使用 transactional=True 创建的会话在 flush() 过程中引发异常时,你必须调用 Session.rollback() 或 Session.close() 以便让该会话在异常后继续运行。 - [ORM]
修复了在将瞬时实体与带有 backref 的集合合并时出现的 merge() 集合翻倍 bug。
参考:#961 - [ORM]
merge(dont_load=True) 不接受瞬时实体,这是为了与 merge(dont_load=True) 不接受任何“脏”对象的事实保持一致。 - [ORM]
添加了由 scoped_session 生成的独立的 “query” 类属性。这提供了 MyClass.query 而不使用 Session.mapper。使用方式:
MyClass.query = Session.query_property()
- [ORM]
当尝试在没有会话的情况下访问过期实例属性时,会引发适当的错误消息。 - [ORM]
dynamic_loader() / lazy=”dynamic” 现在接受并使用 order_by 参数,方式与 relation() 中的工作方式相同。 - [ORM]
添加了 Session 的 expire_all() 方法。对所有持久实例调用 expire()。这在与… - [ORM]
部分或完全过期的实例在常规查询操作中将填充其过期属性,这样可以防止每个实例需要多余的第二个 SQL 语句。 - [ORM]
动态关系在被引用时会创建对父对象的强引用,以便查询仍然有一个父对象可以调用,即使父对象仅在单个表达式范围内创建(并且在其他情况下被取消引用)。
参考:#938 - [ORM]
添加了一个 mapper()标志“eager_defaults”。当设置为 True 时,在 INSERT 或 UPDATE 操作期间生成的默认值将立即后获取,而不是延迟到以后。这模仿了旧的 0.3 行为。 - [orm]
query.join()现在可以接受类映射属性作为参数。这些可以用于替代或与字符串任意组合。特别是这允许在多态关系上构建到子类的连接,即:
query(Company).join([‘employees’, Engineer.name])
- [orm] [(‘employees’] [Engineer.name] [people.join(engineer))]
query.join()还可以接受属性名称/某些可选择的元组作为参数。这允许构建从多态关系的子类连接,即:
query(Company).join(
)
- [orm]
对与多态映射器一起使用 join()的行为进行了一般改进,即从/到多态映射器进行连接并正确应用别名。 - [orm]
当映射器确定映射连接的自然“主键”时,它将更有效地减少通过外键关系等效的列。这影响了需要发送给 query.get()的参数数量,等等。
参考:#933 - [orm]
惰性加载器现在可以处理连接条件中“绑定”列(即作为绑定参数发送父 id 的列)出现多次的情况。具体来说,这允许了包含父相关子查询的 relation()的常见任务,比如“仅选择最近的子项”。
参考:#946 - [orm]
修复了多态继承中的错误,当基多态 _on 列与继承映射器的本地可选择中的任何列不对应时,会引发不正确的异常,超过一级深度 - [orm]
修复了多态继承中的错误,使得在多态映射器上设置有效的“order_by”变得困难。 - [orm]
修复了 Query 中一个相当昂贵的调用,导致多态查询变慢。 - [orm]
如果需要,在 flush()调用期间现在可以加载“被动默认值”和其他“内联”默认值;特别是,这允许构建 relations(),其中外键列引用服务器生成的非主键列。
参考:#954 - [orm]会话事务的其他修复/更改:
- 修复了会话事务管理中的错误:在将连接添加到嵌套事务时,父事务未在连接上启动。
- session.transaction 现在始终指向最内部的活动事务,即使在会话事务对象上直接调用 commit/rollback。
- 现在可以准备两阶段事务。
- 当在一个连接上准备两阶段事务失败时,所有连接都将回滚。
- 当使用嵌套事务时,session.close()不会关闭所有事务。
- rollback()先前错误地将当前事务直接设置为可以回滚到的事务的父事务。现在它将回滚到可以处理的下一个事务,但将当前事务设置为其父事务,并使中间的事务无效。无效的事务只能回滚或关闭,任何其他调用都会导致错误。
- 对于简单子事务,commit()的 autoflush 不会刷新。
- 当会话不在事务中且提交事务失败时,unitofwork flush 不会关闭失败的事务。
sql
- [sql]
添加了“schema.DDL”,一个可执行的自由形式 DDL 语句。DDL 可以独立执行,也可以附加到表或 MetaData 实例上,并在创建和/或删除这些对象时自动执行。 - [sql]
可以使用“useexisting=True”标志在现有表上覆盖表列和约束(例如已经反射的表),该标志现在考虑传递的参数。 - [sql]
添加了基于可调用函数的 DDL 事件接口,可以在表和 MetaData 创建和删除之前和之后添加钩子。 - [sql]
在 delete()和 update()构造中添加了生成 where()方法,该方法返回一个通过 AND 连接到现有条件的新对象,就像 select().where()一样。 - [sql]
在列操作中添加了“ilike()”运算符。在 postgres 上编译为 ILIKE,在其他所有数据库上编译为 lower(x) LIKE lower(y)。
参考:#727 - [sql]
添加了“now()”作为通用函数;在 SQLite、Oracle 和 MSSQL 上编译为“CURRENT_TIMESTAMP”;在其他所有数据库上为“now()”。
参考:#943 - [sql]
startswith()、endswith()和 contains()运算符现在在 SQL 中将通配符运算符与给定操作数连接,即在所有情况下,“‘%’ || ”,正确接受 text(‘something’)操作数
参考:#962 - [sql]
cast()正确接受 text(‘something’)和其他非文字操作数
参考:#962 - [sql]
修复了结果代理中的错误,匿名生成的列标签将无法使用其直接字符串名称访问。 - [sql]
现在可以定义可延迟的约束。 - [sql]
在 select()和 text()中添加了“autocommit=True”关键字参数,以及 select()上的生成 autocommit()方法;对于通过某些用户定义的方式修改数据库的语句,而不是通常的 INSERT/UPDATE/DELETE 等。如果没有进行事务,则此标志将在执行期间启用“autocommit”行为。
参考:#915 - [sql]
现在,可选择项的“.c.” 属性将为其列子句中的每个列表达式添加一个条目。 以前,“未命名”列(如函数和 CASE 语句)未放置在那里。 现在,如果没有“名称”可用,它们将使用其完整的字符串表示形式。。 - [SQL]
一个 CompositeSelect,即任何 union()、union_all()、intersect() 等现在都断言每个可选择项包含相同数量的列。 这符合相应的 SQL 要求。 - [SQL]
为否则未标记的函数和表达式生成的匿名“标签”现在在编译时传播出去,例如 select([select([func.foo()])]) 中的表达式。 - [SQL]
在上述思想的基础上,CompositeSelects 现在根据第一个可选择项中存在的名称构建其“.c.” 集合;corresponding_column() 现在对所有嵌套可选择项都完全有效。 - [SQL]
Oracle 和其他数据库在生成诸如序列等默认值的 SQL 时会正确编码,即使没有使用 unicode idents 也是如此,因为标识符准备程序可能返回缓存的 unicode 标识符。 - [SQL]
对表达式左侧的 datetime 对象进行列和子句比较现在可以工作了(d < table.c.col)。 (RHS 上的 datetime 一直都有效,LHS 上的异常是 datetime 实现的一个怪癖。)
杂项
- [方言]
更好地支持 SQLite 中的模式(通过 ATTACH DATABASE … AS name 链接)。 在过去的某些情况下,SQLite 生成的 SQL 中省略了模式名称。 这不再是这样。 - [方言]
SQLite 上的 table_names 现在也会拾取临时表。 - [方言]
在反射操作期间自动检测未指定的 MySQL ANSI_QUOTES 模式,支持在中途更改模式。 如果不使用反射,则仍然需要手动设置模式。 - [方言]
修复了 SQLite 上 TIME 列的反射。 - [方言]
最终在 postgres 中添加了 PGMacAddr 类型
参考:#580 - [方言]
在 Firebird 下反射与 PK 字段关联的序列(通常使用 BEFORE INSERT 触发器)。 - [方言]
在生成 LIMIT/OFFSET 子查询时,Oracle 会将正确的列组装到结果集列映射中,即使长名称截断发生,也允许列正确映射到结果集
参考:#941 - [方言]
MSSQL 现在在 _is_select 正则表达式中包含 EXEC,这应该允许使用返回行的存储过程。 - [方言]
MSSQL 现在包括对 ANSI SQL row_number() 函数的实验性 LIMIT/OFFSET 实现,因此需要 MSSQL-2005 或更高版本。要启用此功能,请在连接的关键字参数中添加“has_window_funcs”,或在 dburi 查询参数中添加“?has_window_funcs=1”。 - [ext]
更改 ext.activemapper 以使用非事务性会话来处理对象存储。 - [ext]
修复了关联代理列表上“[‘a’] + obj.proxied” 二元操作的输出顺序。
0.4.2p3
发布日期:2008 年 1 月 9 日
通用
- [通用]
子版本编号方案已更改以符合 setuptools 版本号规则;现在应该通过 easy_install -u 获取此版本,而不是 0.4.2 以上。
orm
- [对象关系映射]
修复了使用“可变标量”(如 PickleTypes)时 session.dirty 的 bug - [对象关系映射]
在关系()上刷新时,当其主要或次要连接条件中存在非本地映射列时,添加了更具描述性的错误消息 - [对象关系映射]
现在在 InstanceState.__cleanup()中抑制所有错误。 - [对象关系映射]
修复了属性历史记录中的一个 bug,即将新集合分配给已经具有待处理更改的基于集合的属性会生成不正确的历史记录
参考:#922 - [对象关系映射]
修复了删除孤立级联 bug,即将同一对象两次设置为标量属性可能会记录为孤立对象
参考:#925 - [对象关系映射]
修复了对基于列表的关系进行+=赋值时的级联。 - [对象关系映射]
现在可以针对尚不存在的属性创建同义词,稍后通过 add_property()添加。这通常包括反向引用。(即,您可以为反向引用创建同义词,而不必担心操作顺序)
参考:#919 - [对象关系映射]
修复了多态“union”映射器出现 bug 的情况,该映射器回退到继承表的“延迟”加载 - [对象关系映射]
映射器/映射类(即‘c’)上的“columns”集合针对映射表,而不是在多态“union”加载的情况下的 select_table(这不应该是可察觉的)。 - [对象关系映射]
修复了一个相当关键的 bug,即相同实例可能会在 unitofwork.new 集合中列出多次;最常在使用组合继承映射器和 ScopedSession.mapper 时重现,因为每个实例的多个 init 调用可能会使用不同的 _state 对象保存()具有不同 _state 对象的对象 - [对象关系映射]
在 Query 中添加了非常基本的迭代器行为。调用 query.yield_per(<行数>)并在迭代上下文中评估 Query;每个 N 行的集合将被打包并产生。请谨慎使用此方法,因为它不会尝试在结果批次边界上协调急切加载的集合,也不会在同一批次中出现相同实例时表现良好。这意味着如果在多个批次中引用急切加载的集合,它将被清除,并且在所有情况下,如果在多个批次中出现相同实例,属性将被覆盖。 - [对象关系映射]
为集合和关联代理集合添加了原地设置变异操作符。
参考:#920
sql
- [结构化查询语言]
现在 Text 类型已正确导出,不会在 DDL 创建时引发警告;没有长度的 String 类型仅在 CREATE TABLE 期间引发警告
参考:#912 - [结构化查询语言]
添加了新的 UnicodeText 类型,用于指定编码的、无长度的 Text 类型。 - [sql]
修复了union()
中的错误,以便可以将不派生自FromClause
对象的select()
语句进行联合。 - [sql]
将 TEXT 名称更改为 Text,因为它是一种“通用”类型;TEXT 名称已弃用,直到 0.5 版本。当用于 CREATE TABLE 语句时,没有长度的 String 转为 Text 的“升级”行为也已弃用,将在使用时发出警告(对于 SQL 表达式目的而言,没有长度的 String 仍然可以正常使用)。
参考:#912 - [sql]
生成式select.order_by(None)
/group_by(None)
未能重置排序/分组准则,已修复。
参考:#924
杂项
- [方言]
修复了反射 mysql 空字符串列默认值的问题。 - [扩展]
对于关联代理列表的+
、*
、+=
和*=
支持。 - [方言]
修复了mssql
中MSDate
/MSDateTime
子类中“日期”/“日期时间”测试的范围,以便传入的“日期时间”对象不会被误解为“日期”对象,反之亦然。
参考:#923 - [方言]
修复了 PGArray 类型的子类型结果处理器缺失的问题。
参考:#913
一般
- [一般]
子版本编号方案更改以适应 setuptools 版本号规则;现在 easy_install -u 应该能获取此版本超过 0.4.2。
orm
- [orm]
当使用“可变标量”(例如 PickleTypes)时,修复了 session.dirty 的错误。 - [orm]
当在具有主要或次要连接条件中具有非本地映射列的关系()上刷新时,添加了更具描述性的错误消息。 - [orm]
现在在InstanceState.__cleanup()
中抑制 所有 错误。 - [orm]
修复了属性历史记录中的错误,即将新集合分配给已经具有挂起更改的基于集合的属性将生成不正确的历史记录。
参考:#922 - [orm]
修复了删除孤立级联错误,即将相同对象两次设置为标量属性可能会将其记录为孤立对象。
参考:#925 - [orm]
修复了对列表型关系执行+=
赋值时的级联问题。 - [orm]
现在可以针对尚不存在的属性创建同义词,后续通过add_property()
添加。这通常包括反向引用。(即您可以为反向引用创建同义词,而不必担心操作顺序)
参考:#919 - [orm]
修复了多态“union”映射器可能出现的错误,该映射器退回到继承表的“延迟”加载。 - [orm]
在映射器/映射类(即 ‘c’)上的“columns”集合针对映射表,而不是针对多态“union”加载中的 select_table(这不应该被注意到)。 - [orm]
修复了一个相当关键的错误,即相同的实例可能会在 unitofwork.new 集合中列出多次;最常见的情况是在使用继承映射器和 ScopedSession.mapper 的组合时,因为每个实例的多个 init 调用可能会使用不同的 _state 对象保存()对象。 - [ORM]
向 Query 添加了非常基本的迭代器行为。调用 query.yield_per(<行数>)并在迭代上下文中评估 Query;每个 N 行的集合将被打包并产生。请谨慎使用此方法,因为它不会尝试在结果批次边界上协调急切加载的集合,也不会在同一批次中同一实例出现多次时表现良好。这意味着如果在多个批次中引用了急切加载的集合,它将被清除,并且在所有情况下,如果实例出现在多个批次中,属性将被覆盖。 - [ORM]
修复了集合和关联代理集合的原地设置变异运算符。
参考:#920
sql
- [sql]
现在正确导出文本类型,不会在 DDL 创建时引发警告;没有长度的字符串类型只会在 CREATE TABLE 时引发警告。
参考:#912 - [sql]
添加了新的 UnicodeText 类型,用于指定编码的、无长度的文本类型。 - [sql]
修复了 union()中的错误,以便可以将不派生自 FromClause 对象的 select()语句联合。 - [sql]
将 TEXT 的名称更改为 Text,因为它是一个“通用”类型;TEXT 名称在 0.5 版本之前已被弃用。当没有长度时,String 类型升级为 Text 的行为也在 0.5 版本之前已被弃用;在用于 CREATE TABLE 语句时会发出警告(String 没有长度用于 SQL 表达式目的仍然有效)。
参考:#912 - [sql]
生成式 select.order_by(None) / group_by(None)未能重置 order by/group by 条件,已修复。
参考:#924
杂项
- [方言]
修复了反射 mysql 空字符串列默认值的问题。 - [扩展]
对关联代理列表支持‘+’、‘’、‘+=’和‘=’。 - [方言]
mssql - 缩小了对 MSDate/MSDateTime 子类中“date”/“datetime”的测试范围,以防止传入的“datetime”对象被错误解释为“date”对象或反之。
参考:#923 - [方言]
修复了 PGArray 类型的子类型结果处理器的缺失调用。
参考:#913
SqlAlchemy 2.0 中文文档(六十九)(4)https://developer.aliyun.com/article/1560786