SqlAlchemy 2.0 中文文档(六十八)(1)https://developer.aliyun.com/article/1560739
0.5.0rc4
发布日期:Fri Nov 14 2008
通用
- [general]
全局“propigate”->“propagate”变更。
orm
- [orm]
Query.count() 已增强以在更广泛的情况下执行“正确的操作”。现在它可以计算多实体查询,以及基于列的查询。请注意,这意味着如果你说 query(A, B).count() 没有任何连接条件,它将计算 A*B 的笛卡尔积。任何针对基于列的实体的查询都会自动发出“SELECT count(1) FROM (SELECT…)”以返回实际的行数,这意味着这样的查询 query(func.count(A.name)).count() 将返回一个值,因为该查询将返回一行。 - [orm]
大量的性能调优。对各种 ORM 操作的粗略估计将其速度提高了 10%,比 0.5.0rc3 快 25-30%。 - [orm]
修复错误和行为变更 - [orm]
调整了增强的 InstanceState 上的垃圾收集,以更好地防止由于丢失状态而引起的错误。 - [orm]
当针对多个实体执行时,Query.get() 返回更具信息性的错误消息。
参考:#1220 - [orm]
在 Cls.relation.in_ 上恢复了 NotImplementedError。
参考:#1140, #1221 - [orm]
修复了涉及 relation() 上 order_by 参数的 PendingDeprecationWarning。
参考:#1226
sql
- [sql]
移除了 Connection 对象的 ‘properties’ 属性,应该使用 Connection.info。 - [sql]
恢复了在 ResultProxy 自动关闭游标之前获取 “active rowcount” 的情况。这在 0.5rc3 中被移除。 - [sql]
重新排列了 TypeDecorator 中的 load_dialect_impl() 方法,使其即使用户定义的 TypeDecorator 使用另一个 TypeDecorator 作为其实现也会生效。
mssql
- [mssql]
大量清理和修复以纠正限制和偏移的问题。 - [mssql]
修正了作为二进制表达式一部分的子查询需要被转换为使用 IN 和 NOT IN 语法的情况。 - [mssql]
修复了 E Notation 问题,该问题导致无法插入小于 1E-6 的十进制值。
参考:#1216 - [mssql]
修正了处理模式时反射的问题,特别是当这些模式是默认模式时。
参考:#1217 - [mssql]
修正了将零长度项转换为 varchar 时的问题。现在它会正确调整 CAST。
杂项
- [access]
添加了对 Currency 类型的支持。 - [access]
函数没有返回它们的结果。
参考:#1017 - [access]
修正了连接的问题。Access 仅支持 LEFT OUTER 或 INNER,而不仅仅是 JOIN 本身。
参考:#1017 - [ext]
现在可以在使用 declarative 时在 mapper_args 中使用自定义的 “inherit_condition”。 - [ext]
修复了基于字符串的“remote_side”、“order_by”等在 backref() 中使用时未正确传播的问题。
0.5.0rc3
发布日期:2008 年 11 月 07 日 星期五
orm
- [orm]
添加了两个新的 SessionExtension 钩子:after_bulk_delete() 和 after_bulk_update()。after_bulk_delete() 在查询上进行批量 delete() 操作后调用。after_bulk_update() 在查询上进行批量 update() 操作��调用。 - [orm]
简单的一对多关系的“不等于”比较不会掉入到一个 EXISTS 子句中,而是会比较外键列。 - [orm]
移除了比较集合和可迭代对象的不太有效的用例。使用 contains() 来测试集合成员资格。 - [orm]
改进了 aliased() 对象的行为,使其更准确地适应生成的表达式,这对于自引用比较特别有帮助。
参考:#1171 - [orm]
修复了涉及从类绑定属性构造的 primaryjoin/secondaryjoin 条件的 bug(在使用 declarative 时经常发生),后者稍后会被 Query 不适当地别名化,特别是在各种基于 EXISTS 的比较器中。 - [orm]
修复了使用多个 query.join() 与绑定到别名的描述符时会丢失左别名的 bug。 - [orm]
改进了弱引用标识映射的内存管理,不再需要互斥,对于具有挂起更改的 InstanceState,在需要时延迟恢复被垃圾回收的实例。 - [orm]
InstanceState 对象现在在处理销毁时会删除对自身的循环引用,以使其保持在循环垃圾收集之外。 - [orm]
relation() 在确定联接条件时不会在“请指定 primaryjoin”消息中隐藏不相关的 ForeignKey 错误。 - [orm]
修复了在与同一类的多个别名结合使用时涉及 order_by() 的查询中的错误(将添加测试)。
参考:#1218 - [orm]
使用 Query.join() 时,如果 ON 子句明确指定了一个子句,该子句将被别名化为连接的左侧,从而使诸如 query(Source). from_self().join((Dest, Source.id==Dest.source_id)) 这样的场景能够正常工作。 - [orm]
如果 polymorphic_union() 函数中的每个列的 “key” 与列的名称不同,则将尊重每个列的 “key”。 - [orm]
修复了在具有“delete”级联的多对一关系上的“被动删除”支持。
参考:#1183 - [orm]
修复了复合类型中的错误,该错误阻止了主键复合类型的变异。
参考:#1213 - [orm]
对内部属性访问增加了更多细节,这样级联和刷新操作将不会初始化未加载的属性和集合,保留它们以便稍后进行延迟加载。对于待处理的实例,backref 事件仍然会初始化属性和集合。
参考:#1202
sql
- [sql]
SQL 编译器优化和复杂性降低。编译典型 select() 结构的调用次数比 0.5.0rc2 减少了 20%。 - [sql]
方言现在可以生成可调长度的标签名称。传递参数 “label_length=” 到 create_engine() 来调整动态生成的列标签中最多包含多少个字符,例如“somecolumn AS somelabel”。任何小于 6 的值将导致标签的最小尺寸,包括下划线和数字计数器。编译器使用 dialect.max_identifier_length 的值作为默认值。
参考:#1211 - [sql]
现在简化了对于 ResultProxy “无结果自动关闭” 的检查,仅基于光标描述的存在。所有基于正则表达式的有关返回行的猜测都已经被移除。
参考:#1212 - [sql]
直接执行 union() 构造将正确设置结果行处理。
参考:#1194 - [sql]
“OID”或“ROWID”列的内部概念已被移除。基本上没有任何方言使用它,现在使用 INSERT…RETURNING,使用 psycopg2 的 cursor.lastrowid 的可能性基本上已经消失。 - [sql]
在所有 FromClause 对象上删除了“default_order_by()”方法。 - [sql]
修复了 table.tometadata()方法,以便传递的 schema 参数传播到 ForeignKey 构造中。 - [sql]
稍微改变了对比空集合的 IN 运算符的行为。现在会导致与自身的不等比较。更具可移植性,但会破坏不是纯函数的存储过程。
mysql
- [mysql]
修复了外键反射的 bug,在这种情况下,一个 Table 的显式 schema=与连接附加到的 schema(数据库)相同。 - [mysql]
不再期望在表反射中包含 include_columns 为小写。
oracle
- [oracle]
为 Oracle 方言编写了一个文档字符串。显然,Ohloh 的“few source code comments”标签开始串联了 😃. - [oracle]
在使用 LIMIT/OFFSET 时,删除了 FIRST_ROWS()优化标志,可以通过 optimize_limits=True create_engine()标志重新启用。
参考:#536 - [oracle]
修复了错误和行为变化 - [oracle]
在 create_engine()上将 auto_convert_lobs 设置为 False 也会指示 OracleBinary 类型将 cx_oracle LOB 对象原样返回。
杂项
- [ext]
添加了一个新的扩展 sqlalchemy.ext.serializer。提供了与 Pickle/Unpickle 相对应的 Serializer/Deserializer“类”,以及 dumps()和 loads()。这个序列化器实现了一个“外部对象”pickler,它保留了关键的上下文敏感对象,包括 engines、sessions、metadata、Tables/Columns 和 mappers,使其保持在 pickle 流之外,并且可以在以后使用任何 engine/metadata/session 提供程序来恢复 pickle。这不是用于 pickle 常规对象实例,这些对象实例可以在没有任何特殊逻辑的情况下进行 pickle,而是用于 pickle 表达式对象和完整的 Query 对象,以便在 unpickle 时可以恢复所有 mapper/engine/session 依赖关系。 - [ext]
修复了一个 bug,阻止了声明绑定的“column”对象在 column_mapped_collection()中的使用。
参考:#1174 - [misc]
util.flatten_iterator()函数不会将具有 iter()方法的字符串解释为迭代器,例如在 pypy 中。
参考:#1077
0.5.0rc2
发布日期:2008 年 10 月 12 日星期日
orm
- [orm]
修复了涉及包含字面值或其他非列表达式的 read/write relation()在其 primaryjoin 条件等于外键列的 bug。 - [orm]
在 mapper()中的“non-batch”模式,这个功能允许在每个实例更新/插入时调用 mapper 扩展方法,现在遵循给定对象的插入顺序。 - [orm]
修复了 mapper 中与 RLock 相关的 bug,该 bug 可能在重新进入 mapper compile() 调用时发生死锁,这种情况发生在 ForeignKey 对象中使用声明性构造时。 - [orm]
ScopedSession.query_property 现在接受一个 query_cls 工厂,覆盖了会话配置的 query_cls。 - [orm]
修复了共享状态 bug,干扰了 ScopedSession.mapper 对象能够在对象子类上应用默认 init 实现的能力。 - [orm]
修复了 Query 上的切片(即 query[x:y])在长度为零的切片、两端为 None 的切片上正常工作的问题。
参考:#1177 - [orm]
添加了一个示例,说明了 Celko 的“嵌套集”作为 SQLA 映射的示例。 - [orm]
包含别名参数的 contains_eager() 即使别名嵌入在 SELECT 中,也可以在通过 query.select_from() 发送到 Query 时工作。 - [orm]
contains_eager() 的用法现在与同时包含常规 eager load 和 limit/offset 的 Query 兼容,因为这些列被添加到 Query 生成的子查询中。
参考:#1180 - [orm]
session.execute() 将执行传递给它的 Sequence 对象(从 0.4 版本开始的回归)。 - [orm]
从 object_mapper() 和 class_mapper() 中删除了“raiseerror”关键字参数。如果给定的类/实例未映射,这些函数在所有情况下都会引发异常。 - [orm]
修复了在 autocommit=False 会话上调用 session.transaction.commit() 时未启动新事务的 bug。 - [orm]
对 Session.identity_map 的弱引用行为进行了一些调整,以减少异步 GC 副作用。 - [orm]
调整了 Session 在后刷新时对新“干净”对象的记账,以更好地防止在异步 gc 时对对象进行操作。
参考:#1182
sql
- [sql]
column.in_(someselect) 现在可以作为一个列子句表达式使用,而不会使子查询泄漏到 FROM 子句中。
参考:#1074
mysql
- [mysql]
临时表现在可以反射。
sqlite
- [sqlite]
对 SQLite 日期/时间绑定/结果处理进行了全面改进,使用正则表达式和格式字符串,而不是 strptime/strftime,以通用支持 1900 年前的日期、带微秒的日期。
参考:#968 - [sqlite]
在 sqlite 方言中禁用了 String(以及 Unicode、UnicodeText 等)的 convert_unicode 逻辑,以适应 pysqlite 2.5.0 的新要求,即只接受 Python unicode 对象;itsystementwicklung.de/pipermail/list-pysqlite/2008-March/000018.html
oracle
- [oracle]
Oracle 将检测包含在 SELECT 前面的字符串型语句中的注释作为 SELECT 语句。
参考:#1187
0.5.0rc1
发布日期:2008 年 9 月 11 日 星期四
orm
- [orm]
Query 现在具有 delete() 和 update(values) 方法。这允许使用 Query 对象执行批量删除/更新。 - [orm]
查询(Query(*cols)返回的 RowTuple 对象现在优先使用映射属性名称而不是列键,列键而不是列名作为键名,即使这些不是底层 Column 对象的名称。直接的 Column 对象,如 Query(table.c.col),将返回 Column 的“key”属性。 - [orm]
Query 添加了 scalar() 和 value() 方法,每个方法返回一个标量值。scalar() 不带参数,大致相当于 first()[0],value() 接受一个列表达式,大致相当于 values(expr).next()[0]。 - [orm]
改进了在查询() 实体列表中放置 SQL 表达式时确定 FROM 子句的方法。特别是标量子查询不应该将其内部 FROM 对象泄露到外部查询中。 - [orm]
从一个映射类到一个映射子类的关系(relation())的连接,在映射子类配置为单表继承时,将包括一个 IN 子句,该子句限制了连接类的子类型为请求的类型,在连接的 ON 子句中生效。这对于急加载连接和查询.join()都生效。请注意,在某些情况下,IN 子句也会出现在查询的 WHERE 子句中,因为这个区分有多个触发点。 - [orm]
AttributeExtension 已经得到改进,使得事件在突变实际发生之前触发。此外,append() 和 set() 方法现在必须返回给定的值,该值用作突变操作中要使用的值。这允许创建验证 AttributeListeners,在实际操作发生之前引发异常,并且可以将给定的值更改为其他值。 - [orm]
column_property()、composite_property() 和 relation() 现在接受一个或多个 AttributeExtensions,使用“extension”关键字参数。 - [orm]
query.order_by().get() 从 GET 所发出的查询中悄悄删除了“ORDER BY”,但不会引发异常。 - [orm]
添加了一个验证器 AttributeExtension,以及一个 @validates 装饰器,其用法与 @reconstructor 类似,标记一个方法为验证一个或多个映射属性。 - [orm]
class.someprop.in_() 在关系“in_”实现之前引发 NotImplementedError
参考:#1140 - [orm]
修复了尚未加载集合的多对多集合的主键更新问题
参考:#1127 - [orm]
修复了使用组的 deferred() 列与一个无关的 synonym() 一起产生 AttributeError 的 bug,在延迟加载时。 - [orm]
SessionExtension 上的 before_flush()挂钩在最终计算新/脏/已删除列表之前发生,允许在 flush 继续之前在 before_flush()中进一步更改 Session 的状态。
参考:#1128 - [orm]
Session 和其他对象的“extension”参数现在可以选择性地是一个列表,支持发送到多个 SessionExtension 实例的事件。Session 将 SessionExtensions 放在 Session.extensions 中。 - [orm]
对 flush()的重入调用会引发错误。这也作为针对 Session.flush()并发调用的基本但不是绝对可靠的检查。 - [orm]
改进了 query.join()在连接到已连接表继承子类时的行为,使用显式连接条件(即不是在关系上)。 - [orm]
@orm.attributes.reconstitute 和 MapperExtension.reconstitute 已重命名为@orm.reconstructor 和 MapperExtension.reconstruct_instance - [orm]
修复了从基类继承的子类的@reconstructor 挂钩。
参考:#1129 - [orm]
composite()属性类型现在支持 composite 类上的 set_composite_values()方法,如果类使用属性名称而不是列的键名表示状态,则需要该方法;默认生成的值现在在 flush 时正确填充。此外,将属性设置为 None 的复合体现在比较时是正确的。
参考:#1132 - [orm]
attributes.get_history()返回的三元组现在可以是列表和元组的混合。(以前成员总是列表。) - [orm]
修复了在实体上更改主键属性的错误,其中属性的先前值已过期会在 flush()时产生错误。
参考:#1151 - [orm]
修复了自定义仪器化 bug,即对于 ORM 未加载的新构造实例,未调用 get_instance_dict()。 - [orm]
如果给定对象尚未存在,则 Session.delete()将给定对象添加到会话中。这是从 0.4 版本中的一个回归错误。
参考:#1150 - [orm]
Session 上的 echo_uow 标志已弃用,工作单元日志现在仅适用于应用程序级别,而不是每个会话级别。 - [orm]
从 InstrumentedAttribute 中删除了不接受 escape kwaarg 的冲突 contains()运算符。
参考:#1153
sql
- [sql]
暂时回滚了“ORDER BY”增强功能。此功能暂停等待进一步开发。
参考:#1068 - [sql]
exists()构造不会将其包含的元素列表作为 FROM 子句“导出”,从而使它们可以更有效地在 SELECT 的列子句中使用。 - [sql]
and_() 和 or_() 现在生成一个 ColumnElement,允许布尔表达式作为结果列,例如 select([and_(1, 0)]).
参考:#798 - [sql]
Bind 参数现在是 ColumnElement 的子类,这使得它们可以被 orm.query 选择(它们已经具有大多数 ColumnElement 语义)。 - [sql]
为 exists() 构造添加了 select_from() 方法,使其与常规 select() 更加兼容。 - [sql]
添加了 func.min()、func.max()、func.sum() 作为“通用函数”,基本上允许它们的返回类型自动确定。有助于 SQLite 上的日期、十进制类型等。
参考:#1160 - [sql]
添加了 decimal.Decimal 作为“自动检测”类型;当使用 Decimal ��,绑定参数和通用函数将将它们的类型设置为 Numeric。
schema
- [schema]
添加了“sorted_tables”访问器到 MetaData,它返回按依赖顺序排序的 Table 对象列表。这使得 MetaData.table_iterator() 方法被弃用。util.sort_tables() 中的“reverse=False”关键字参数也已被移除;使用 Python 的 ‘reversed’ 函数来反转结果。
参考:#1033 - [schema]
所有 Numeric 类型的 ‘length’ 参数已重命名为 ‘scale’。‘length’ 已被弃用,仍会发出警告。 - [schema]
放弃了对用户定义类型(convert_result_value, convert_bind_param)的 0.3 兼容性。
mysql
- [mysql]
MSInteger、MSBigInteger、MSTinyInteger、MSSmallInteger 和 MSYear 的 ‘length’ 参数已重命名为 ‘display_width’。 - [mysql]
添加了 MSMediumInteger 类型。
参考:#1146 - [mysql]
函数 func.utc_timestamp() 编译为 UTC_TIMESTAMP,不带括号,当与 executemany() 结合使用时,括号似乎会妨碍使用。
oracle
- [oracle]
limit/offset 不再使用 ROW NUMBER OVER 来限制行数,而是与特殊的 Oracle 优化注释一起使用子查询。允许 LIMIT/OFFSET 与 DISTINCT 一起使用。
参考:#536 - [oracle]
has_sequence() 现在考虑当前的 “schema” 参数
参考:#1155 - [oracle]
将 BFILE 添加到反射类型名称中
参考:#1121
杂项
- [declarative]
修复了如果复合主键引用另一个尚未定义的表,映射器无法初始化的 bug。
参考:#1161 - [declarative]
修复了在使用 backref 时使用基于字符串的 primaryjoin 条件会引发异常的问题。
0.5.0beta3
发布日期:2008 年 8 月 4 日 星期一
orm
- [orm]
SQLAlchemy 映射器的“entity_name” 功能已被移除。有关原因,请参见tinyurl.com/6nm2ne
- [orm]
Session、sessionmaker() 和 scoped_session() 上的“autoexpire” 标志已重命名为“expire_on_commit”。它不会影响 rollback() 的过期行为。 - [orm]
修复了在映射器延迟加载继承属性时可能发生的无限循环 bug。 - [orm]
为 Session 添加了一个名为“_enable_transaction_accounting”的遗留支持标志,当为 False 时,禁用所有事务级对象计数,包括回滚时的过期、提交时的过期、新建/删除列表维护和开始时的自动刷新。 - [orm]
relation() 的“cascade” 参数接受 None 作为值,这等效于没有级联。 - [orm]
对动态关系进行了关键修复,允许在 flush() 后正确清除“修改”历史记录。 - [orm]
类上的用户定义的@property 在映射器初始化期间被检测并保留在原位。这意味着如果@property 挡住了同名的表列,那么该列将根本不会被映射(并且列没有被重新映射到不同的名称),也不会应用来自继承类的受控属性。使用 include_properties/exclude_properties 集合排除的名称也适用相同的规则。 - [orm]
添加了一个名为 after_attach() 的新 SessionExtension 钩子。这在通过 add()、add_all()、delete() 和 merge() 附加对象时调用。 - [orm]
从另一个映射器继承的映射器,在继承其继承映射器的列时,将使用在该继承映射器中指定的重新分配的属性名称。以前,如果“Base” 将“base_id” 重新分配为名称“id”,那么“SubBase(Base)” 仍将获得一个名为“base_id”的属性。这可以通过在每个子映射器中显式声明列来解决,但这相当难以实现,而且在使用声明时也是不可能的。
参考:#1111 - [orm]
修复了 Session 中潜在的一系列竞争条件,异步 GC 可能会在会话中删除未修改、不再引用的项目,因为它们存在于要处理的项目列表中,通常在 session.expunge_all() 和相关方法中。 - [orm]
对 _CompileOnAttr 机制进行了一些改进,这应该会减少“在编译期间未替换属性 x”警告的概率。(这通常适用于 SQLA 黑客,如 Elixir 开发人员)。 - [orm]
修复了一个 bug,即对于挂起的孤立实例引发的“未保存的挂起实例” FlushError 在生成负责错误的关系列表时不会考虑超类映射器。
sql
- [sql]
没有参数的 func.count() 渲染为 COUNT(),相当于 func.count(text(‘’))。 - [sql]
ORDER BY 表达式中的简单标签名称呈现为它们自身,而不是其对应表达式的重新陈述。目前,此功能仅对 SQLite、MySQL 和 PostgreSQL 启用。可以在显示支持此行为的每个方言时启用它。
参考:#1068
mysql
- [mysql]
用于在 CREATE TABLE 中使用的 MSEnum 值的引用现在是可选的,并将根据需要进行引用。 (对于现有表格,引用始终是可选的。)
参考:#1110
杂项
- [扩展]
作为参数发送给 relation() 的 remote_side 和 foreign_keys 参数的类绑定属性现在被接受,允许它们与声明式一起使用。此外,修复了在与急加载一起指定为类绑定属性时指定 order_by 的错误。 - [扩展]
调整了声明式初始化的 Columns,使得非重命名列以与非声明式映射器相同的方式初始化。这允许继承映射器设置其同名的“id”列,以便父“id”列优先于子列,减少请求此值时的数据库往返。
0.5.0beta2
发布日期:2008 年 7 月 14 日星期一
orm
- [对象关系映射]
除了过期属性,如果延迟属性的数据存在于结果集中,则也会加载。
参考:#870 - [对象关系映射]
如果属性列表不包含任何基于列的属性,则 session.refresh() 将引发一个信息性错误消息。 - [对象关系映射]
如果未指定列或映射器,query() 将引发一个信息性错误消息。 - [对象关系映射]
惰性加载器现在在继续之前会触发自动刷新。这使得在自动刷新的情况下,集合或标量关系的 expire() 函数能够正常工作。 - [对象关系映射]
column_property() 属性代表不在映射表中的 SQL 表达式或列(例如来自视图的列),在 INSERT 或 UPDATE 后会自动过期,假设它们没有在本地修改,以便在访问时刷新为最新数据。
参考:#887 - [对象关系映射]
在使用 query.join(cls, aliased=True) 时,修复了两个连接表继承映射器之间的显式自引用连接。
参考:#1082 - [对象关系映射]
在与仅包含列子句和 SQL 表达式 ON 子句的 join 一起使用时,修复了 query.join()。 - [对象关系映射]
mapper() 中的“allow_column_override”标志已被移除。这个标志几乎总是被误解。其特定功能可以通过 include_properties/exclude_properties 映射器参数实现。 - [对象关系映射]
修复了 Query 上的 str() 方法。
参考:#1066 - [对象关系映射]
即使定义了特定于表/映射器的绑定,Session.bind 仍然作为默认值使用。
sql
- [sql]
添加了新的 match() 运算符,执行全文搜索。支持 PostgreSQL、SQLite、MySQL、MS-SQL 和 Oracle 后端。
模式
- [模式]
添加了 prefixes 选项到 Table,接受一个字符串列表,在 CREATE TABLE 语句中的 CREATE 后插入。
参考:#1075 - [模式]
Unicode、UnicodeText 类型现在默认设置为“assert_unicode”和“convert_unicode”,但接受这些值的覆盖 **kwargs。
extensions
- [扩展]
声明性支持一个 table_args 类变量,它可以是一个字典,或者是一个元组形式的 (arg1, arg2, …, {kwarg1:value, …}),其中包含要传递给 Table 构造函数的位置参数 + 关键字参数。
参考:#1096
sqlite
- [sqlite]
修改了 SQLite 对“微秒”的表示,使其与 str(somedatetime) 的输出匹配,即微秒以字符串格式的小数秒表示。这使得 SQLA 的 SQLite 日期类型与直接使用 Pysqlite 保存的日期时间兼容(Pysqlite 只调用 str())。请注意,这与 SQLA 0.4 生成的 SQLite 数据库文件中现有的微秒值不兼容。
要全局获取旧行为:
from sqlalchemy.databases.sqlite import DateTimeMixin DateTimeMixin.legacy_microseconds = True
- 要在单个 DateTime 类型上获取行为:
t = sqlite.SLDateTime() t.legacy_microseconds = True
- 然后在 Column 上使用“t”作为类型。
参考:#1090 - [sqlite]
SQLite 的 Date、DateTime 和 Time 类型现在只接受 Python datetime 对象,而不是字符串。如果您想要自己用 SQLite 格式化日期为字符串,请使用 String 类型。如果您希望它们无论如何都返回 datetime 对象,尽管它们接受字符串作为输入,请围绕 String 创建一个 TypeDecorator - SQLA 不鼓励这种模式。
0.5.0beta1
发布日期:2008 年 6 月 12 日 星期四
一般
- [一般]
全局“propigate”->”propagate” 更改。
orm
- [ORM]
如果每个 Column 的“key”与列的名称不同,则 polymorphic_union() 函数将尊重每个 Column 的“key”。 - [ORM]
修复了一个仅在 0.4 版本中存在的 bug,该 bug 阻止了复合列与继承映射器正常工作。
参考:#1199 - [ORM]
修复了映射器中与 RLock 相关的 bug,该 bug 可能在重新进入映射器 compile() 调用时发生死锁,这在 ForeignKey 对象中使用声明性构造时会发生。从 0.5 移植而来。 - [ORM]
修复了复合类型中的 bug,该 bug 阻止了主键复合类型的变异。
参考:#1213 - [ORM]
添加了 ScopedSession.is_active 访问器。
参考:#976 - [ORM]
类绑定访问器可以作为 relation() order_by 的参数使用。
参考:#939 - [ORM]
修复了 ShardedSession.execute() 上的 shard_id 参数。
参考:#1072
sql
- [sql]
Connection.invalidate() 检查关闭状态以避免属性错误。
参考:#1246 - [sql]
NullPool 支持失��时重新连接的行为。
参考:#1094 - [sql]
TypeEngine 用于缓存特定于方言的类型的每个方言缓存现在是 WeakKeyDictionary。这是为了防止方言对象被引用,以便应用程序创建任意数量的引擎或方言。这会带来一些性能损失,将在 0.6 版本中解决。
参考:#1299 - [sql]
修复了 SQLite 反射方法,以便检测到不存在的 cursor.description,触发自动关闭游标,以便在最近的 pysqlite 版本上不会在 fetchone() 调用时失败,因为没有结果。
mysql
- [mysql]
修复了在反射期间未出现 FK 列时引发异常的错误。
参考:#1241
oracle
- [oracle]
修复了某些类型的 out 参数无法接收的错误;非常感谢 huddlej at wwu.edu!
参考:#1265
杂项
- [no_tags]
现在 mapper 添加的 “init” 触发器/装饰器尝试精确地模仿原始 init 的参数签名。对于 ‘_sa_session’ 的传递不再是隐式的-您必须在构造函数中允许此关键字参数。 - [no_tags]
ClassState 更名为 ClassManager。 - [no_tags]
类可以通过提供 sa_instrumentation_manager 属性来提供自己的 InstrumentationManager。 - [no_tags]
自定义仪器可能使用任何机制将 ClassManager 与类关联,并将 InstanceState 与实例关联。这些对象上的属性仍然是 SQLAlchemy 原生仪器使用的默认关联机制。 - [no_tags]
将 entity_name、_sa_session_id 和 _instance_key 从实例对象移动到实例状态。这些值仍然以旧方式可用,现在已弃用,使用附加到类的描述符。在访问时将发出弃用警告。 - [no_tags]
_prepare_instrumentation 的 _prepare_instrumentation 别名已被移除。 - [no_tags]
sqlalchemy.exceptions 已更名为 sqlalchemy.exc。该模块可以使用任一名称导入。 - [no_tags]
与 ORM 相关的异常现在在 sqlalchemy.orm.exc 中定义。在导入 sqlalchemy.orm 期间,ConcurrentModificationError、FlushError 和 UnmappedColumnError 的兼容性别名将安装在 sqlalchemy.exc 中。 - [no_tags]
sqlalchemy.logging 已更名为 sqlalchemy.log。 - [no_tags]
sqlalchemy.log.SADeprecationWarning 的过渡别名已被移除。 - [no_tags]
移除了 exc.AssertionError,并使用 Python 内置的 AssertionError 替代使用。 - [no_tags]
对于单个类的多个 entity_name= 主映射器附加的 MapperExtensions 的行为已更改。对于一个类定义的第一个 mapper() 是唯一符合 MapperExtension ‘instrument_class’、‘init_instance’ 和 ‘init_failed’ 事件的 mapper。这是不向后兼容的;以前定义的最后一个 mapper 的扩展将接收这些事件。 - [firebird]
增加了对插入(仅限 2.0+)、更新和删除(仅限 2.1+)返回值的支持。 - [postgres]
添加了 Postgres 的索引反射支持,使用了 Ken Kuhlman 提交的一个很棒的我们长期忽视的补丁。
参考:#714
0.5.9
无发布日期
sql
- [sql]
在 expression 包中修复了错误的 self_group() 调用。
参考:#1661
sql
- [sql]
在 expression 包中修复了错误的 self_group() 调用。
参考:#1661
0.5.8
发布日期:2010 年 1 月 16 日(周六)
sql
- [sql]
现在 Column 上的 copy() 方法支持未初始化的、未命名的 Column 对象。这使得可以轻松创建声明性助手,将常见列放置在多个子类上。 - [sql]
类似 Sequence() 的默认生成器在复制操作中正确转换。 - [sql]
Sequence() 和其他 DefaultGenerator 对象现在可以作为 Column 的 “default” 和 “onupdate” 关键字参数的值接受,除了被位置接受。 - [sql]
修复了一个列算术错误,该错误影响包含独立列表达式的克隆可选项的列对应关系。这个错误通常只有在使用新的 ORM 行为(仅在 0.6 中可用)时才会注意到,但在 SQL 表达式级别也更加正确。
参考:#1568,#1617
postgresql
- [postgresql]
extract() 函数在 0.5.7 中稍微改进了,但仍需要更多工作来生成正确的类型转换(大部分时间在 PG 的 EXTRACT 中似乎是必要的)。现在,类型转换是使用基于 PG 的日期/时间/间隔算术文档的规则字典生成的。它再次接受 text() 构造,这在 0.5.7 中已经损坏了。
参考:#1647
misc
- [firebird]
将更多错误识别为断开连接。
参考:#1646
sql
- [sql]
现在 Column 上的 copy() 方法支持未初始化的、未命名的 Column 对象。这使得可以轻松创建声明性助手,将常见列放置在多个子类上。 - [sql]
像 Sequence() 这样的默认生成器在复制操作中能够正确转换。 - [sql]
Sequence() 和其他 DefaultGenerator 对象可以作为 Column 的 “default” 和 “onupdate” 关键字参数的值被接受,除了可以按位置接受之外。 - [sql]
修复了一个影响包含独立列表达式的克隆可选择项的列算术错误。这个 bug 通常只在使用 0.6 中可用的新 ORM 行为时才会注意到,但在 SQL 表达式级别也更正确。
参考:#1568, #1617
postgresql
- [postgresql]
extract() 函数在 0.5.7 中稍微改进了一下,需要更多的工作来生成正确的类型转换(在 PG 的 EXTRACT 中,类型转换在很多情况下是必要的)。现在,根据 PG 的日期/时间/间隔算术文档生成一个规则字典来生成类型转换。它还再次接受 text() 构造,这在 0.5.7 中是有问题的。
参考:#1647
杂项
- [firebird]
更多错误被识别为断开连接。
参考:#1646
版本号:0.5.7
发布日期:2009 年 12 月 26 日 星期六
orm
- [orm]
contains_eager() 现在可以与自动生成的子查询一起使用,当你说“query(Parent).join(Parent.somejoinedsubclass)”时,即当 Parent 加入到一个联接表继承子类时。以前,contains_eager() 会错误地将子类表单独添加到查询中,产生笛卡尔积。票务描述中有一个示例。
参考:#1543 - [orm]
query.options() 现在只对加载的对象传播,以便进一步子加载只对相关的选项进行传播,将像 contains_eager() 生成的各种不可序列化选项排除在各个实例状态之外。
参考:#1553 - [orm]
Session.execute() 现在根据传入的表达式(insert()/update()/delete() 构造)定位特定于表和映射器的绑定。
参考:#1054 - [orm]
Session.merge() 现在可以正确地将一个多对一或 uselist=False 属性覆盖为 None,如果在要合并的对象中该属性也为 None。 - [orm]
修复了一个不必要的选择,在合并包含空主键标识符的瞬态对象时会发生。
参考:#1618 - [orm]
传递给 relation()、column_property() 等的 “extension” 属性的可变集合不会被改变或在多个仪器调用之间共享,防止重复的扩展,比如 backref populators,被插入到列表中。
参考:#1585 - [orm]
修复了 CompositeProperty 上 get_committed_value() 的调用。
参考:#1504 - [orm]
修复了如果在列列表中出现非映射列实体,则 Query 在调用没有明确“左”侧的 join() 时会崩溃的 bug。
参考:#1602 - [orm]
修复了在联接表子类上配置复合列时,复合列无法正确加载的 bug,在版本 0.5.6 中引入,作为修复的结果。感谢 Scott Torborg。
参考:#1480, #1616 - [orm]
对于多对一关系的“使用 get”行为,即懒加载将回退到可能缓存的 query.get() 值,现在可以跨越连接条件工作,其中两个比较的类型不是完全相同的类,但共享相同的“亲和性” - 即 Integer 和 SmallInteger。还允许反射和非反射类型的组合使用 0.5 风格的类型反射,例如 PGText/Text(注意 0.6 反射类型为其泛型版本)。
参考:#1556 - [orm]
修复了在 query.update() 中将 Cls.attribute 作为值字典中的键并使用 synchronize_session=‘expire’(在 0.6 中为 ‘fetch’)时的 bug。
参考:#1436
sql
- [sql]
修复了两阶段事务中的一个 bug,即 commit() 方法未设置完整状态,从而允许后续的 close() 调用成功。
参考:#1603 - [sql]
修复了“numeric”参数风格,默认参数风格使用 Informixdb。 - [sql]
在 select 的列子句中重复表达式根据每个子句元素的标识进行去重,而不是实际字符串。这允许位置元素正确呈现,即使它们都呈现相同,比如“问号”样式的绑定参数。
参考:#1574 - [sql]
与连接池连接相关联的游标(即 _CursorFairy)现在正确地代理 iter() 到底层游标。
参考:#1632 - [sql]
类型现在支持“亲和性比较”操作,即 Integer/SmallInteger 是“兼容的”,或者 Text/String,PickleType/Binary 等。的一部分。
参考:#1556 - [sql]
修复了阻止别名的别名() 被克隆或适应的 bug(在 ORM 操作中经常发生)。
参考:#1641
postgresql
- [postgresql]
添加了对 DOUBLE PRECISION 类型的反射支持,通过新的 postgres.PGDoublePrecision 对象。这是 postgresql.DOUBLE_PRECISION 在 0.6 中的表示。
参考:#1085 - [postgresql]
增加了对反映 INTERVAL 类型的 INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND 语法的支持。
参考:#460 - [postgresql]
修正了“has_sequence”查询,以考虑当前模式或显式序列状态的模式。
参考:#1576 - [postgresql]
修复了 extract()的行为,以应用运算符优先规则到应用“timestamp”转换时的“::”运算符 - 确保正确的括号。
参考:#1611
sqlite
- [sqlite]
sqlite 方言正确生成用于在备用模式中的表的 CREATE INDEX。
参考:#1439
mssql
- [mssql]
在构造 pyodbc 连接参数时,将 TrustedConnection 的名称更改为 Trusted_Connection
参考:#1561
oracle
- [oracle]
“table_names”方言函数,被 MetaData .reflect()使用,省略了“索引溢出表”,这是 Oracle 在使用“只有索引表”并且溢出时生成的系统表。这些表无法通过 SQL 访问,也无法反射。
参考:#1637
misc
- [ext]
在构建类之后(即通过类级属性赋值),可以向连接表声明的超类添加列,并且该列将传播到子类。这是与 0.5.6 中修复的相反情况。
参考:#1523, #1570 - [ext]
修复了分片示例中的轻微不准确性。在 ORM 中比较列的等价性最好使用 col1.shares_lineage(col2)。
参考:#1491 - [ext]
从 ShardedQuery 中删除了未使用的 load()方法。
参考:#1606
orm
- [orm]
contains_eager()现在可以与自动生成的子查询一起使用,当您说“query(Parent).join(Parent.somejoinedsubclass)”时,即当 Parent 连接到一个连接表继承子类时。以前,contains_eager()会错误地将子类表单独添加到查询中,产生笛卡尔积。票务描述中有一个示例。
参考:#1543 - [orm]
query.options()现在仅对可能进一步子加载的对象传播,仅对这种行为相关的选项进行传播,将由 contains_eager()生成的各种不可序列化选项排除在各个实例状态之外。
参考:#1553 - [orm]
现在,Session.execute()根据传入的表达式(即 insert()/update()/delete()构造)定位特定于表和映射器的绑定。
参考:#1054 - [orm]
Session.merge() 现在可以正确地将 many-to-one 或 uselist=False 属性重写为 None,如果给定要合并的对象中的属性也为 None。 - [orm]
修复了在合并包含空主键标识符的瞬态对象时会发生不必要的选择的 bug。
参考:#1618 - [orm]
传递给 relation()、column_property() 等的“extension”属性的可变集合不会在多个插装调用之间被突变或共享,防止重复扩展,例如插入到列表中的 backref populator。
参考:#1585 - [orm]
修复了对 CompositeProperty 上 get_committed_value() 的调用。
参考:#1504 - [orm]
修复了如果在列列表中出现非映射列实体时调用没有明确“左”侧的 join(),则 Query 会崩溃的 bug。
参考:#1602 - [orm]
修复了复合列在配置为连接表子类时无法正确加载的 bug,该 bug 由 0.5.6 版本中的修复引入,感谢 Scott Torborg。
参考:#1480, #1616 - [orm]
许多对一关系的“使用 get”行为,即延迟加载将回退到可能被缓存的 query.get() 值,现在可以跨越连接条件工作,其中两个比较的类型不完全相同,但共享相同的“亲和性” - 即 Integer 和 SmallInteger。还允许反射和非反射类型的组合与 0.5 风格的类型反射一起工作,例如 PGText/Text(请注意 0.6 反映类型为它们的通用版本)。
参考:#1556 - [orm]
在传递 Cls.attribute 作为值字典中的键并使用 synchronize_session=’expire’(0.6 版本中为‘fetch’)时,修复了 query.update() 中的 bug。
参考:#1436
sql
- [sql]
修复了两阶段事务中 commit() 方法未设置完整状态的 bug,从而允许后续的 close() 调用成功。
参考:#1603 - [sql]
修复了“numeric” paramstyle,默认情况下是 Informixdb 使用的默认 paramstyle。 - [sql]
在 select 的 columns 子句中重复表达式基于每个子句元素的标识进行去重,而不是实际字符串。这允许位置元素在所有元素都以相同方式呈现时正确呈现,例如“问号”样式的绑定参数。
参考:#1574 - [sql]
与连接池连接关联的游标(即 _CursorFairy)现在正确地代理 iter() 到底层游标。
引用:#1632 - [sql]
types 现在支持“关联比较”操作,即 Integer/SmallInteger 是“兼容的”,或者 Text/String、PickleType/Binary 等。部分。
引用:#1556 - [sql]
修复了阻止 alias() 的 alias() 被克隆或适应的错误(在 ORM 操作中经常发生)。
引用:#1641
postgresql
- [postgresql]
增加了对反映 DOUBLE PRECISION 类型的支持,通过一个新的 postgres.PGDoublePrecision 对象。这在 0.6 中是 postgresql.DOUBLE_PRECISION。
引用:#1085 - [postgresql]
增加了对反映 INTERVAL 类型的 INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND 语法的支持。
引用:#460 - [postgresql]
修正了“has_sequence”查询以考虑当前模式或显式序列指定的模式。
引用:#1576 - [postgresql]
修复了 extract() 的行为,以应用操作符优先级规则到“::”操作符时应用“timestamp”转换 - 确保正确的括号化。
引用:#1611
sqlite
- [sqlite]
sqlite 方言正确地为位于替代模式中的表生成 CREATE INDEX。
引用:#1439
mssql
- [mssql]
在构造 pyodbc 连接参数时,将 TrustedConnection 的名称更改为 Trusted_Connection
引用:#1561
oracle
- [oracle]
“table_names” 方言函数,被 MetaData.reflect() 使用,省略了“索引溢出表”,这是 Oracle 在使用“仅索引表”且溢出时生成的系统表。这些表无法通过 SQL 访问,也无法反映。
引用:#1637
misc
- [ext]
在类构造完成后(即通过类级属性分配),可以向连接表声明超类添加列,并且列将向下传播到子类。这与 0.5.6 中的情况相反。
引用:#1523,#1570 - [ext]
修复了分片示例中的轻微不准确。在 ORM 中比较列的等效性最好使用 col1.shares_lineage(col2)。
引用:#1491 - [ext]
从 ShardedQuery 中删除了未使用的 load() 方法。
引用:#1606
SqlAlchemy 2.0 中文文档(六十八)(3)https://developer.aliyun.com/article/1560741