0.9 Changelog¶

0.9.10

Released: July 22, 2015

orm

  • [orm] [feature]

    添加了一个新条目 "entity" 返回的词典 Query.column_descriptions . 这是指表达式引用的主ORM映射类或别名类。与现有条目相比 "type" 它将始终是映射的实体,即使是从列表达式中提取的,或者如果给定的表达式是纯核心表达式,则为无。另请参阅 #3403 它修复了这一功能中的回归,该功能在0.9.10中未发布,但在1.0版本中发布。

    References: #3320

  • [orm] [bug]

    Query 使用时不支持join、subselect或special from子句 Query.update()Query.delete() 方法;如果方法 Query.join()Query.select_from() 已调用,将发出警告。从1.0.0b5开始,这将引发错误。

    References: #3349

  • [orm] [bug]

    修复了多个嵌套的 Session.begin_nested() 操作将无法传播已在内部保存点中更新的对象的"dirty"标志,这样,如果回滚封闭保存点,则该对象将不会是过期状态的一部分,因此将恢复到其数据库状态。

    References: #3352

engine

  • [engine] [bug]

    添加了字符串值 "none" 给那些被 Pool.reset_on_return 参数作为的同义词 None ,以便字符串值可用于所有设置,允许类似 engine_from_config() 可以毫无问题地使用。

    References: #3375

sql

  • [sql] [feature]

    增加了对CTE的官方支持,该CTE由 Insert.from_select() . 这种行为直到0.9.9才意外发生,因为作为 #3248 . 请注意,这是在插入之后、选择之前呈现WITH子句;在插入、更新、删除的顶层呈现的CTE的完整功能是一个新功能,面向以后的版本。

    References: #3418

  • [sql] [bug]

    固定问题,其中 MetaData 使用命名约定的对象无法正确处理pickle。如果取消勾选,则跳过该属性会导致不一致和失败 MetaData 对象用于建立附加表的基础。

    References: #3362

postgresql

  • [postgresql] [bug]

    修复了一个长期存在的错误 Enum 与psycopg2方言一起使用的类型,以及非ASCII值和 native_enum=False 无法正确解码返回结果。这源于 postgresql.ENUM 类型过去是没有“非本机”选项的独立类型。

    References: #3354

mysql

  • [mysql] [bug] [pymysql]

    修复了使用带有Unicode参数的“ExecuteMany”操作时对pymysql的Unicode支持。sqlAlchemy现在以unicode对象的形式传递语句和绑定参数,因为pymysql通常在内部使用字符串插值来生成最终语句,在executeMany的情况下,只对最终语句执行“encode”步骤。

    References: #3337

  • [mysql] [bug] [py3k]

    修正了 mysql.BIT 在未使用的py3k上键入 ord() 功能正常。拉车请求由David Marin提供。

    References: #3333

sqlite

  • [sqlite] [bug]

    修复了sqlite方言中包含名称中非字母字符(如点或空格)的唯一约束反射将不会随名称反射的错误。

    References: #3495

misc

  • [bug] [ext]

    修正了当使用扩展属性检测系统时,当 class_mapper() 调用时使用了一个无效的输入,该输入也碰巧不是弱可引用的,例如整数。

    References: #3408

  • [bug] [pypy] [tests]

    修复了阻止“py py setup.py test”正常工作的导入。

    References: #3406

  • [bug] [ext]

    固定回归0.9.9,其中 as_declarative() 符号已从中删除 sqlalchemy.ext.declarative 命名空间。

    References: #3324

0.9.9

Released: March 10, 2015

orm

  • [orm] [feature]

    添加了新参数 Session.connection.execution_options 可用于设置 Connection 当它首次签出时,在事务开始之前。这用于在事务启动之前设置选项,如连接上的隔离级别。

    参见

    设置事务隔离级别 -新文档部分详细介绍了使用会话设置事务隔离的最佳实践。

    References: #3296

  • [orm] [feature]

    添加了新方法 Session.invalidate() ,功能类似于 Session.close() ,除了调用 Connection.invalidate() 在所有连接上,确保它们不会返回到连接池。这在某些情况下很有用,例如在不安全的情况下处理gevent超时,即使用于回滚,也可以进一步使用连接。

  • [orm] [bug]

    修正了ORM对象比较中多对一比较的错误 != None 如果源是一个别名类,或者如果查询因别名联接或多态查询而需要对表达式应用特殊别名,则会失败;此外,如果查询因别名联接或多态查询而需要应用特殊别名,则修复了将多个别名与一个对象状态进行比较的错误。

    References: #3310

  • [orm] [bug]

    修正了内部断言在 after_rollback() 处理程序 Session 错误地添加状态 Session 在处理程序中,以及警告和删除此状态的任务(由 #2389 )尝试继续。

    References: #3309

  • [orm] [bug]

    修正了当 Query.join() 使用未知的kw参数调用时,由于格式错误,将引发自身的typeerror。拉请求提供马耳他博奇。

  • [orm] [bug]

    修正了延迟加载SQL构造中的错误,即在“指向自身的列”中多次引用同一“本地”列的复杂PrimaryJoin在所有情况下都不会被替换。决定替换的逻辑已经被修改为更开放的。

    References: #3300

  • [orm] [bug]

    “通配符”加载程序选项,特别是由 orm.load_only() 覆盖所有未明确提到的属性的选项,现在考虑到给定实体的超类,如果该实体使用继承映射进行映射,那么超类中的属性名称也将从加载中省略。此外,多态鉴别器列无条件地包含在列表中,与主键列的方式相同,因此即使设置了LOAD_only(),子类型的多态加载也会继续正常工作。

    References: #3287

  • [orm] [bug] [pypy]

    修正了一个错误,如果在 Query 在获取结果之前,特别是当无法形成行处理器时,光标将保持打开状态,结果处于挂起状态,实际上不会关闭。这通常只是Pypy这样的解释器的一个问题,在这种解释器中,光标不会立即被gc'ed,并且在某些情况下,可能导致事务/锁的打开时间比需要的时间长。

    References: #3285

  • [orm] [bug]

    修复了在多次替换固定映射类上的关系的不受支持和高度不推荐的用例中可能出现的泄漏,这涉及到任意增长的目标映射器数量。替换旧关系时会发出警告,但是如果映射已用于查询,则旧关系仍将在某些注册表中被引用。

    References: #3251

  • [orm] [bug] [sqlite]

    修正了使用时表达突变为“找不到列”错误的错误。 Query 在查询sqlite时从多个匿名列实体中进行选择,这是sqlite方言使用的“join rewriteing”功能的副作用。

    References: #3241

  • [orm] [bug]

    修正了ON子句用于 Query.join()Query.outerjoin() 到单个继承子类,使用 of_type() 如果 from_joinpoint=True 旗子被设置了。

    References: #3232

engine

sql

  • [sql] [bug]

    增加了 native_enum 标志到 __repr__() 的输出 Enum ,这在与Alembic AutoGenerate一起使用时最重要。拉请求由迪米特里斯·西奥多洛提供。

  • [sql] [bug]

    修复了使用 TypeDecorator 实现了一个类型 TypeDecorator 当针对使用此类型的对象使用任何类型的SQL比较表达式时,将失败,并出现python的“cannot create a consistent method resolution order(mro)”错误。

    References: #3278

  • [sql] [bug]

    修正了当两个语句中的列共享同一个名称时,嵌入在insert中的select列(通过values子句或作为“from select”)会污染返回子句生成的结果集中使用的列类型,从而导致在检索返回行时可能出现错误或不适配。

    References: #3248

schema

  • [schema] [bug]

    修复了0.9的外键设置系统中的错误,这样用于链接 ForeignKey 当外键与目标一起使用“linku tou name=true”时,到其父级可能会失败 Table 如果目标列的键值与它的名称不同,则在稍后才会接收其父列,例如在反射+“useexisting”方案中,如果使用列反射事件来更改反射的.key,则在反射中会发生这种情况。 Column 对象,以便链接到名称变得重要。当目标列具有不同的键并且使用链接到名称引用时,也以类似的方式修复了通过FK传输对列类型的支持。

    References: #1765, #3298

postgresql

  • [postgresql] [feature]

    增加了对 CONCURRENTLY 关键字和PostgreSQL索引,使用 postgresql_concurrently . 拉式请求,由Iuri de Silvio提供。

  • [postgresql] [bug]

    修复了在使用psycopg2时与数组类型一起对PostgreSQL UUID类型的支持。psycopg2方言现在使用psycopg2.extras.register_uid()hook,以便uuid值始终作为uuid()对象传递给/从dbapi传递。这个 UUID.as_uuid 该标志仍然有效,除了psycopg2,当禁用该标志时,我们需要将返回的uuid对象转换回字符串。

    References: #2940

  • [postgresql] [bug]

    增加了对 postgresql.JSONB 使用psycopg2 2.5.4或更高版本时的数据类型,它具有JSONB数据的本机转换功能,因此必须禁用sqlacchemy的转换器;此外,新添加的psycopg2扩展 extras.register_default_jsonb 用于建立通过 json_deserializer 争论。还修复了postgresql集成测试,与json类型不同,postgresql集成测试实际上不是往返于jsonb类型。拉请求由Mateusz Susik提供。

  • [postgresql] [bug]

    修复了使用旧的psycopg2版本<2.4.3(不支持此标志)注册hstore类型时使用的“array-oid”标志,以及使用用户定义的本机JSON序列化程序挂钩“register-default-json” json_deserializer 在psycopg2版本<2.5上,不包括本机JSON。

  • [postgresql] [bug]

    修复了PostgreSQL方言无法在 Index 不直接对应于表绑定列的;通常当 text() construct是索引中的表达式之一;如果表达式中有一个或多个表达式是这样的表达式,则可能会曲解表达式列表。

    References: #3174

mysql

  • [mysql] [bug]

    在mysqldb方言中添加了一个版本检查,围绕“utf8_bin”排序规则检查,因为这在mysql server<5.0上失败。

    References: #3274

  • [mysql] [change]

    这个 gaerdbms 方言不再是必要的,会发出一个贬低的警告。谷歌现在建议直接使用mysqldb方言。

    References: #3275

sqlite

  • [sqlite] [feature]

    在sqlite上添加了对部分索引(例如,使用WHERE子句)的支持。拉请求由Kai Groner提供。

    参见

    部分指标

  • [sqlite] [feature]

    为sqlcipher后端添加了新的sqlite后端。此后端使用pysqlcipher python驱动程序提供加密的sqlite数据库,该驱动程序与pysqlite驱动程序非常相似。

    参见

    pysqlcipher

misc

  • [bug] [ext] [py3k]

    修正了在PY3K下关联代理列表类无法正确解释切片的错误。拉请求由Gilles Dartiguelogue提供。

  • [bug] [examples]

    更新了 使用历史记录表进行版本控制 例如,将映射的列重新映射到匹配的列名称以及列的分组;特别是,这允许以相同的方式在历史映射中映射显式分组在名为Joined继承方案的同一列中的列,避免在0.9系列中添加有关此模式的警告,并允许属性键的相同视图。

  • [bug] [examples]

    修复了examples/generic_associations/discriminator_on_association.py示例中的错误,其中未将addressassociation的子类映射为“单表继承”,这导致在进一步使用映射时出现问题。

0.9.8

Released: October 13, 2014

orm

  • [orm] [bug] [engine]

    修复了通常影响与 #3199named=True 将使用参数。有些事件将无法注册,而另一些事件将无法正确调用事件参数,通常是在事件被“包装”以便以其他方式进行自适应的情况下。“命名”机制已重新排列,以不干扰内部包装函数所期望的参数签名。

    References: #3197

  • [orm] [bug]

    修正了影响许多类事件的错误,特别是ORM事件,还包括引擎事件,其中通常的逻辑是“消除重复”对 event.listen() 对于那些封装了侦听器函数的事件,使用相同的参数将失败。断言将在registry.py中命中。这个断言现在已经集成到重复数据消除检查中,并且增加了一个更简单的方法来全面检查重复数据消除。

    References: #3199

  • [orm] [bug]

    修复了当复杂的自引用PrimaryJoin包含函数时发出的警告,同时指定了远程连接端;该警告建议设置“远程连接端”。它现在只在远程端不存在时发出。

    References: #3194

orm declarative

  • [bug] [declarative] [orm]

    修复了“nonetype”对象在使用时没有属性“concrete”错误 AbstractConcreteBase 与声明 __abstract__ .

    References: #3185

engine

  • [engine] [bug]

    传递给 Engine 要么通过 create_engine.execution_optionsEngine.update_execution_options() 没有传给特别节目 Connection 用于在“FirstConnect”事件中初始化方言;方言通常在此阶段执行其自己的查询,此处不应用任何当前可用选项。特别是,“autocommit”选项导致尝试在此初始连接内自动提交,由于 Connection .

    References: #3200

  • [engine] [bug]

    用于确定受插入或更新影响的列的字符串键现在在它们贡献给“已编译缓存”缓存键时进行排序。这些键以前的顺序不是确定的,这意味着同一语句可以在等价的键上缓存多次,这不仅会损失内存,而且会损失性能。

    References: #3165

sql

  • [sql] [bug]

    修复了一个错误,其中SQL包中的大量SQL元素将无法 __repr__() 由于缺少 description 然后在内部attributeError重新调用时调用递归溢出的属性 __repr__() .

    References: #3195

  • [sql] [bug]

    对表/索引反射的一种调整,如果索引报告的列在表中不存在,则会发出警告并跳过该列。这可能发生在一些特殊的系统列情况下,正如Oracle所观察到的那样。

    References: #3180

  • [sql] [bug]

    修复了CTE中的错误,其中 literal_binds 当一个CTE在语句中引用另一个别名CTE时,编译器参数不会总是正确传播。

    References: #3154

  • [sql] [bug]

    修正了0.9.7回归 #3067 与一个命名错误的单元测试相结合,使得所谓的“模式”类型 BooleanEnum 不能再泡菜了。

    References: #3067, #3144

postgresql

  • [postgresql] [feature] [pg8000]

    增加了对PG8000驱动程序“SANE多行计数”的支持,这主要适用于在ORM中使用版本控制时。该功能是基于使用中的PG8000 1.9.14或更高版本检测到的。托尼洛克的请求。

  • [postgresql] [bug]

    对这一问题的重新审视首次修补于0.9.5,显然是psycopg2的 .closed 访问器不如我们假定的那样可靠,因此我们在检测IS断开连接方案时,添加了一个显式检查异常消息“ssl syscall error:bad file descriptor”和“ssl syscall error:eof detected”。我们将继续查询psycopg2的connection.closed作为第一个检查。

    References: #3021

  • [postgresql] [bug]

    修复了PostgreSQL JSON类型无法持久化或以其他方式呈现SQL空列值,而不是JSON编码的错误。 'null' . 为了支持这种情况,更改如下:

    • 价值 null() 现在可以指定,这将始终导致产生语句的空值。

    • 一个新的参数 JSON.none_as_null 添加,如果为true,则表示 None 值应该作为SQL空值持久化,而不是用JSON编码。 'null' .

    对于除psycopg2之外的dbapis(即pg8000),也会修复NULL as none的检索。

    References: #3159

  • [postgresql] [bug]

    DBAPI错误的异常包装系统现在可以容纳非标准DBAPI异常,例如psycopg2 TransactionRollbackError。现在将使用中最近的可用子类引发这些异常。 sqlalchemy.exc ,对于TransactionRollbackError, sqlalchemy.exc.OperationalError .

    References: #3075

  • [postgresql] [bug]

    固定错误 postgresql.array 对象,如果与纯Python列表进行比较,将无法使用正确的数组构造函数。请示安德鲁。

    References: #3141

  • [postgresql] [bug]

    添加了支持的 FunctionElement.alias() 函数的方法,例如 func 构建。以前,此方法的行为未定义。当前行为类似于pre-0.9.4,也就是说,将函数转换为具有给定别名的单列FROM子句,其中该列本身是匿名命名的。

    References: #3137

mysql

  • [mysql] [bug] [mysqlconnector]

    mysqlconnector从2.0版开始,可能是python 3合并的副作用,现在不希望百分比符号(例如用作模数运算符等)加倍,即使使用“pyformat”绑定的参数格式(mysqlconnector不记录此更改)。当检测是否应将modular运算符呈现为 %%% .

  • [mysql] [bug] [mysqlconnector]

    现在为mysqlconnector 2.0及更高版本传递了unicode SQL;对于py2k和mysql<2.0,则对字符串进行编码。

sqlite

  • [sqlite] [bug]

    当使用附加的数据库文件从联合中选择时,pysqlite驱动程序将cursor.description中的列名称报告为“dbname.tablename.colname”,而不是像通常对联合所做的那样报告为“tablename.colname”(请注意,两者都应该是“colname”,但我们会处理)。这里的列转换逻辑已经被调整为检索最右边的标记,而不是第二个标记,因此它在这两种情况下都有效。托尼罗伯茨提供解决方案。

    References: #3211

mssql

  • [mssql] [bug]

    修复了pymsql方言中的版本字符串检测,以便与Microsoft SQL Azure一起使用,它将单词“SQL Server”更改为“SQL Azure”。

    References: #3151

oracle

  • [oracle] [bug]

    修复了Oracle方言中长期存在的错误,其中以数字开头的绑定参数名称不会被引用,因为Oracle不喜欢绑定参数名称中的数字。

    References: #2138

misc

  • [bug] [declarative]

    修正了在一些特殊的最终用户设置中观察到的一个不太可能的竞争条件,在声明性中检查“重复类名”的尝试会碰到一个与正在删除的其他类相关的未完全清除的弱引用;这里的检查现在确保weakref在进一步调用某个对象之前仍然引用该对象。

    References: #3208

  • [bug] [ext]

    修正了在集合替换事件期间,如果reorder-on-append标志设置为true,则会抛出项目顺序的排序列表中的错误。修复程序确保排序列表只影响与对象显式关联的列表。

    References: #3191

  • [bug] [ext]

    固定错误在哪里 ext.mutable.MutableDict 未能实现 update() 字典方法,因此不捕捉变化。拉车请求由Matt Chisholm提供。

  • [bug] [ext]

    修复了自定义子类 ext.mutable.MutableDict 不会出现在“胁迫”操作中,而是返回一个普通的 ext.mutable.MutableDict . 拉客请求由Matt Chisholm提供。

  • [bug] [pool]

    修复了连接池日志记录中的错误,如果使用 logging.setLevel() 而不是使用 echo_pool 标志。已添加断言此日志记录的测试。这是0.9.0中引入的回归。

    References: #3168

0.9.7

Released: July 22, 2014

orm

  • [orm] [bug] [eagerloading]

    修正了由 #2976 在0.9.4中发布,其中“外部连接”沿着连接的热切负载链传播会错误地将“内部连接”沿着兄弟连接路径转换为外部连接,此时只有后代路径应接收“外部连接”传播;此外,修复了“嵌套”连接传播在适当地在两个兄弟连接路径之间。

    References: #3131

  • [orm] [bug]

    修正了由于 #2736 何处 Query.select_from() 方法不再设置 Query 对象正确,以便 Query.filter_by()Query.join() 当按字符串名称搜索属性时,调用将无法检查相应的“from”实体。

    References: #2736, #3083

  • [orm] [bug]

    query.update()/delete()的“evaluator”不适用于多表更新,需要设置为 synchronize_session=Falsesynchronize_session='fetch' ;现在发出警告。在1.0中,这将升级为完全异常。

    References: #3117

  • [orm] [bug]

    修复了在回滚外部事务后,保存点块中保留、删除或更改了主键的项将不会参与恢复到其以前的状态(不在会话、会话中、以前的pk)的错误。

    References: #3108

  • [orm] [bug]

    修复了与 with_polymorphic() 对于这种类型的实体和其他实体,子查询加载中实体和列的目标更加准确。

    References: #3106

  • [orm] [bug]

    修复了涉及动态属性的错误,这也是对 #3060 从0.9.5版开始。与lazy='dynamic'的自引用关系将在刷新操作中引发类型错误。

    References: #3099

engine

sql

  • [sql] [bug]

    固定错误 EnumSchemaType 类型与 MetaData 当事件(如创建事件)在 MetaData .

    This change is also backported to: 0.8.7

    References: #3124

  • [sql] [bug]

    修复了自定义operator plus中的错误 TypeEngine.with_variant() 系统,使用 TypeDecorator 当使用比较运算符时,与variant一起使用将失败,并出现mro错误。

    This change is also backported to: 0.8.7

    References: #3102

  • [sql] [bug]

    修复命名约定功能中的错误,其中使用的检查约束约定包括 constraint_name 会迫使所有人 BooleanEnum 类型也需要名称,因为它们隐式地创建了一个约束,即使最终的目标后端不需要生成约束,比如PostgreSQL。重新组织了这些特定约束的命名约定机制,以便在DDL编译时而不是在约束/表构造时进行命名确定。

    References: #3067

  • [sql] [bug]

    修正了公共表表达式中的错误,即当CTE以某种方式嵌套时,位置绑定参数可以以错误的最终顺序表示。

    References: #3090

  • [sql] [bug]

    修复多值错误 Insert 构造将无法检查超出为文本SQL表达式给定的第一个值的后续值项。

    References: #3069

  • [sql] [bug]

    在python版本<2.6.5的方言kwargs迭代中添加了“str()”步骤,解决了“no unicode keyword arg”错误,因为这些参数在某些反射进程中作为关键字arg传递。

    References: #3123

  • [sql] [bug]

    这个 TypeEngine.with_variant() 方法现在将接受类型类作为参数,该参数在内部转换为实例,使用其他构造(如 Column .

    References: #3122

postgresql

  • [postgresql] [feature]

    增加了kw参数 postgresql_regconfigColumnOperators.match() 运算符,允许将“reg config”参数指定给 to_tsquery() 已发出函数。请示Jonathan Vanasco。

    References: #3078

  • [postgresql] [feature]

    通过添加对PostgreSQL JSONB的支持 JSONB . 拉请求由Damian Dimmich提供。

  • [postgresql] [bug] [pg8000]

    修复了0.9.5中由新的PG8000隔离级别功能引入的错误,其中引擎级别隔离级别参数将在连接时引发错误。

    References: #3134

mysql

  • [mysql] [bug]

    在现代mysql python版本中,mysql error 2014“commands out of sync”似乎是作为编程错误而不是操作错误而引发的;所有测试“is disconnect”的mysql错误代码现在都在operationalerror和programmingeror中进行了检查,不管如何。

    This change is also backported to: 0.8.7

    References: #3101

sqlite

  • [sqlite] [bug]

    修复了一个sqlite join重写问题,如果子查询中存在与封闭查询(如联接继承方案)中相同的表,则嵌入为标量子查询(如in中)的子查询将从封闭查询接收不适当的替换。

    References: #3130

mssql

  • [mssql] [feature]

    已为SQL Server 2008启用“多值插入”。拉请求由阿尔伯特·西恩提供。还扩展了对“identity insert”模式的检查,以便在语句的values子句中存在标识键时包括该模式。

  • [mssql] [bug]

    向“set identity_insert”语句添加了语句编码,该语句在显式插入插入插入到标识列时运行,以支持驱动程序(如不支持Unicode语句的pyodbc+unix+py2k)上的非ASCII表标识符。

    This change is also backported to: 0.8.7

  • [mssql] [bug]

    在SQL Server pyodbc方言中,修复了 description_encoding 方言参数,如果结果集包含替换编码中的名称,则在未显式设置时会阻止对cursor.description进行正确分析。向前看不需要这个参数。

    This change is also backported to: 0.8.7

    References: #3091

  • [mssql] [bug]

    修正了由 #3025 其中用于确定“默认架构”的查询在SQL Server 2000中无效。对于SQL Server 2000,我们返回到默认的方言“schema name”参数,该参数是可配置的,但默认为“dbo”。

    References: #3025

oracle

  • [oracle] [bug] [tests]

    修复了Oracle方言测试套件中的错误,其中在一个测试中,“username”假定位于数据库URL中,即使情况并非如此。

    References: #3128

misc

  • [bug] [tests]

    修正了“python setup.py test”没有适当地调用distuils的错误,错误会在测试套件的末尾发出。

  • [bug] [declarative]

    修正了当声明性 __abstract__ 标记实际上是值时没有被区分 False . 这个 __abstract__ 标记需要在被测试的级别上实际计算为真值。

    References: #3097

0.9.6

Released: June 23, 2014

orm

  • [orm] [bug]

    已还原的更改 #3060 -这是一个工作单元修复,在1.0中通过 #3061 . 固定在 #3060 不幸的是,它产生了一个新问题,即一个多对一属性的热切加载可以产生一个解释为属性更改的事件。

    References: #3060

0.9.5

Released: June 23, 2014

orm

  • [orm] [feature]

    “primaryjoin”模型被进一步扩展,以允许一个严格从单列到自身的连接条件,通过某种SQL函数或表达式进行转换。这是一种实验,但概念的第一个证明是一个“物化路径”连接条件,其中使用“like”将路径字符串与自身进行比较。这个 ColumnOperators.like() 还将运算符添加到要在PrimaryJoin条件中使用的有效运算符列表中。

    References: #3029

  • [orm] [feature]

    添加了新的实用功能 make_transient_to_detached() 它可以用来制造对象,这些对象的行为就像是从会话中加载的一样,然后被分离。不存在的属性被标记为已过期,并且可以将对象添加到会话中,在该会话中,对象的行为将类似于持久的会话。

    References: #3017

  • [orm] [bug]

    修复了子查询预加载中的错误,在该错误中,跨多态子类边界的长的预加载链与多态加载一起将无法定位链中的子类链接,从而导致在 AliasedClass .

    This change is also backported to: 0.8.7

    References: #3055

  • [orm] [bug]

    修正了ORM错误 class_mapper() 函数将屏蔽在映射器配置过程中由于用户错误而引起的属性错误或键错误。属性/keyror的catch已变得更具体,不包括配置步骤。

    This change is also backported to: 0.8.7

    References: #3047

  • [orm] [bug]

    对于继承映射器隐式地将其基于列的属性之一与父级的属性组合在一起的情况,已经添加了额外的检查,在这种情况下,这些列通常不必共享相同的值。这是通过添加的现有支票的扩展 #1892 但是,这个新的检查只发出一个警告,而不是异常,以允许可能依赖现有行为的应用程序。

    References: #3042

  • [orm] [bug]

    修改了的行为 orm.load_only() 这样,主键列总是被添加到要“取消引用”的列列表中;否则,ORM无法加载该行的标识。显然,可以推迟映射的主键,ORM将失败,这一点没有改变。但是,正如load_本质上说的“推迟除x之外的所有内容”,更重要的是,pk cols不属于这种延迟的一部分。

    References: #3080

  • [orm] [bug]

    修正了在所谓的“行切换”场景中出现的一些边缘情况,即插入/删除可以转换为更新。在这种情况下,多对一关系设置为“无”,或者在某些情况下,标量属性设置为“无”,可能不会被检测为值的净更改,因此更新不会重置上一行的内容。这是由于属性历史工作方式的一些尚未解决的副作用,即隐式假设“无”实际上不是以前未设置的属性的“更改”。另请参阅 #3061 .

    注解

    这个变化已经 REVERTED 0.9.完整修复将在1.0版的sqlAlchemy中进行。

    References: #3060

  • [orm] [bug]

    有关 #3060 对工作单元进行了调整,以便在要删除的自引用对象的图形中,相关多对一对象的加载稍微更具侵略性;如果未设置被动删除,则相关对象的加载将帮助确定正确的删除顺序。

  • [orm] [bug]

    修正了sqlite join重写中由于重复而导致匿名列名在子查询中重写不正确的错误。这将影响具有任何子查询+联接的选择查询。

    References: #3057

  • [orm] [bug] [sql]

    修复了中新增强的布尔强制 #2804 如果“where”和“having”的新规则不适用于 select() 构造,这也是 Query 因此在ORM中也不起作用。

    References: #3013

engine

  • [engine] [bug]

    修复了当引擎第一次连接并进行初始检查时,如果发生DBAPI异常,并且该异常不是断开连接异常,但当我们尝试关闭它时,光标会引发错误,则会发生这种错误。在这种情况下,当我们试图通过连接池记录光标关闭异常时,真正的异常会被撤销,并且失败,因为我们试图以一种在这个非常具体的场景中不合适的方式访问池的记录器。

    References: #3063

  • [engine] [bug]

    修正了一些“双重失效”的情况,其中连接失效可能发生在已经很关键的部分中,如connection.close();最终,这些情况是由 #2907 ,因为“返回时重置”功能调用连接/事务以处理它,在这里可能会捕获“断开检测”。但是,最近的变化 #2985 使其更可能被视为“连接失效”操作更快,因为0.9.4版本的问题比0.9.3版本的问题更具再现性。

    现在在任何可能发生失效的部分中添加检查,以停止对失效连接的进一步不允许的操作。这包括两个在引擎级别和池级别的修复。虽然在高度并发的gevent案例中观察到了这个问题,但理论上它可能发生在连接关闭操作中发生断开的任何一种场景中。

    References: #3043

sql

  • [sql] [feature]

    放宽了合同 Index 可以指定一个 text() 表达式作为目标;如果要通过内联声明或通过 Table.append_constraint() .

    References: #3028

  • [sql] [feature]

    增加新标志 expression.between.symmetric ,当设置为“真”时,渲染“在对称之间”。还添加了一个新的否定运算符“NotBetween”现在允许像 ~col.between(x, y) 呈现为“不在x和y之间的列”,而不是带括号的非字符串。

    References: #2990

  • [sql] [bug]

    修正了insert..from select结构中的错误,从union中选择将把union包装在一个匿名(例如,未标记)子查询中。

    This change is also backported to: 0.8.7

    References: #3044

  • [sql] [bug]

    固定错误在哪里 Table.update()Table.delete() 当一个空的 and_()or_() 或应用其他空白表达式。这与 select() .

    This change is also backported to: 0.8.7

    References: #3045

  • [sql] [bug]

    这个 Column.nullable 标志隐式设置为 False 当那 Column 在一个显式的 PrimaryKeyConstraint 为了那张表格。这种行为现在与 Column 本身有 Column.primary_key 标志设置为 True 这是一个完全相同的情况。

    References: #3023

  • [sql] [bug]

    修正了错误 Operators.__and__()Operators.__or__()Operators.__invert__() 无法在自定义中重写运算符重载方法 TypeEngine.Comparator 实施。

    References: #3012

  • [sql] [bug]

    修正了新的错误 DialectKWArgs.argument_for() 方法,如果为以前未包含任何特殊参数的构造添加参数,则将失败。

    References: #3024

  • [sql] [bug]

    修正了0.9中引入的回归,其中新的“order by<labelname>”功能来自 #1068 不会对排序依据中呈现的标签名称应用引用规则。

    References: #1068, #3020

  • [sql] [bug]

    已还原的导入 Functionsqlalchemy.sql.expression 导入命名空间,该命名空间在0.9开头被删除。

postgresql

  • [postgresql] [feature]

    在使用PG8000 DBAPI时增加了对自动提交隔离级别的支持。托尼洛克的请求。

  • [postgresql] [feature]

    添加了新标志 ARRAY.zero_indexes 到PostgreSQL ARRAY 类型。当设置为 True ,在传递到数据库之前,将在所有数组索引值中添加一个值,从而允许在基于python样式的零索引和基于postgresql的一个索引之间实现更好的互操作性。拉请求由Alexey Terentev提供。

    References: #2785

  • [postgresql] [bug]

    增加了 hashable=False 向PG致敬 HSTORE 当在混合列/实体列表中请求ORM映射的hstore列时,需要允许ORM跳过“哈希”操作。补片由Gunnlaugur_r Briem提供。

    This change is also backported to: 0.8.7

    References: #3053

  • [postgresql] [bug]

    添加了新的“断开”消息“连接意外关闭”。这似乎与较新版本的SSL有关。拉请求由Antti Haapala提供。

    This change is also backported to: 0.8.7

  • [postgresql] [bug]

    PycPcG2 .closed 现在,在确定异常是否为“断开连接”错误时,将咨询访问器;理想情况下,这将消除对异常消息进行任何其他检查以检测断开连接的需要,但是我们将保留这些现有消息作为回退。这应该能够处理“ssleeof”等较新的情况。拉请求由德克·穆勒提供。

    References: #3021

  • [postgresql] [enhancement]

    添加了新类型 postgresql.OID 到PostgreSQL方言。虽然“OID”通常是PG中的私有类型,但在现代版本中不会公开,但有些PG用例(如可能公开这些类型的大型对象支持)以及一些用户报告的模式反射用例中也会公开。

    References: #3002

mysql

  • [mysql] [bug]

    修复了将列名添加到 mysql_length 索引上的参数需要对带引号的名称使用相同的引号才能被识别。修复程序使引号成为可选的,但也提供了与那些使用变通方法的向后兼容的旧行为。

    This change is also backported to: 0.8.7

    References: #3085

  • [mysql] [bug]

    添加了对反射表的支持,其中索引使用等号包含键块大小。拉请求由肖恩·麦格文提供。

    This change is also backported to: 0.8.7

mssql

  • [mssql] [bug]

    修改了用于确定当前默认架构名称的查询以使用 database_principal_id() 功能与 sys.database_principals 视图,以便我们可以独立于正在进行的登录类型(例如,SQL Server、Windows等)确定默认模式。

    References: #3025

firebird

  • [firebird] [bug]

    修复了使用绑定参数(只有firebird同时具有这两个参数)将“limit”呈现为“select first n rows”的组合,以及同时具有“limit”和“positional”绑定参数(例如qmark style)的列级子查询错误地将子查询级别位置分配给封闭select之前的位置的错误,因此返回不正常的参数。

    References: #3038

misc

  • [feature] [examples]

    使用最新的关系特性,添加了一个演示物化路径的新示例。示例:周杰克。

  • [bug] [declarative]

    这个 __mapper_args__ 当访问时,字典是从声明性混合或抽象类中复制的,因此声明性本身对此字典所做的修改不会与其他映射的修改冲突。字典是根据 version_id_colpolymorphic_on 参数,将内的列替换为正式映射到本地类/表的列。

    This change is also backported to: 0.8.7

    References: #3062

  • [bug] [ext]

    修正了可变扩展中的错误,其中 MutableDict 没有为报告更改事件 setdefault() 字典操作。

    This change is also backported to: 0.8.7

    References: #3051, #3093

  • [bug] [ext]

    固定错误在哪里 MutableDict.setdefault() 未返回现有值或新值(此Bug未在任何0.8版本中发布)。托马斯赫夫提供的拉取请求。

    This change is also backported to: 0.8.7

    References: #3051, #3093

  • [bug] [testsuite]

    在公共测试套件中,更改为使用 String(40) 从支持较少的 Text 在里面 StringTest.test_literal_backslashes . Pullreq礼遇1月

  • [bug] [py3k] [tests]

    修正了一些涉及 imp 运行测试时,模块和python 3.3或更高版本。拉车请求由Matt Chisholm提供。

    References: #2830

0.9.4

Released: March 28, 2014

general

  • [general] [feature]

    已添加对pytest运行测试的支持。目前,除了机头外,还对该转轮进行了支撑,这可能比机头向前推进更为可取。SQLAlchemy使用的nose插件系统已经被分离出来,这样它也可以在pytest下工作。目前还没有放弃对nose的支持的计划,我们希望测试套件本身能够继续保持尽可能不可知的测试平台。有关使用pytest运行测试的更新信息,请参阅文件readme.unittests.rst。

    通过指定 --db 和/或 --dburi 多次标记。这不会为每个数据库运行整个测试套件,而是允许特定于某些后端的测试用例在运行测试时使用该后端。当使用pytest作为测试运行程序时,系统还将为每个数据库多次运行特定的测试套件,尤其是“方言套件”中的测试。计划是,增强的系统也将由Alembic使用,并允许Alembic在一次运行中针对多个后端运行迁移操作测试,包括Alembic本身不包括的第三方后端。还鼓励第三方方言和扩展以规范化sqlachemy的测试套件为基础;有关从sqlachemy的测试平台构建的背景,请参阅文件readme.dialogins.rst。

  • [general] [bug]

    调整的 setup.py 文件以支持将来可能删除的 setuptools.Feature 设置工具的扩展。如果不存在此关键字,则安装程序仍将使用SetupTools成功,而不是返回distuils。现在也可以通过设置disable_sqlacchemy_cext环境变量来禁用C扩展构建。无论SETUPTOOLS是否可用,此变量都有效。

    This change is also backported to: 0.8.6

    References: #2986

  • [general] [bug]

    修复了在python 3.4中发生的一些测试/特性故障,特别是用于包装“列默认值”可调用文件的逻辑对于python内置程序无法正常工作。

    References: #2979

orm

  • [orm] [feature]

    添加了新参数 orm.mapper.confirm_deleted_rows . 默认为true,表示一系列的delete语句应确认光标行数与应匹配的主键数匹配;在大多数情况下(使用version_id时除外),此行为已被取消,以支持删除层叠时自引用的异常边缘情况;为适应此情况,消息现在只是一个警告,而不是一个例外,标志可以用来指示一个期望自引用级联删除这种性质的映射。另请参阅 #2403 对于原始更改的背景。

    References: #3007

  • [orm] [feature]

    如果 MapperEvents.before_configured()MapperEvents.after_configured() 事件将应用于特定的映射器或映射类,因为仅为 Mapper 以一般水平为目标。

  • [orm] [feature]

    添加了新的关键字参数 once=Trueevent.listen()event.listens_for() . 这是一个方便的特性,它将包装给定的侦听器,以便只调用一次。

  • [orm] [feature]

    向添加了新选项 relationship.innerjoin 指定字符串 "nested" .当设置为 "nested" 而不是 True ,联接的“链接”将在现有外部联接的右侧用括号括起内部联接,而不是作为外部联接的字符串进行链接。这可能是0.9发布时的默认行为,因为我们在ORM中引入了右嵌套联接的特性,但是我们现在将其保留为非默认的,以避免进一步的意外。

    References: #2976

  • [orm] [bug]

    修正了ORM错误:更改对象的主键,然后将其标记为删除,将无法针对正确的行进行删除。

    This change is also backported to: 0.8.6

    References: #3006

  • [orm] [bug]

    修正了0.8.3的回归 #2818 在哪里? Query.exists() 如果一个查询只有一个 Query.select_from() 条目,但没有其他实体。

    This change is also backported to: 0.8.6

    References: #2995

  • [orm] [bug]

    改进了一条错误消息,如果查询()针对不可选择的,例如 literal_column() ,然后尝试使用 Query.join() 这样,“左”侧将被确定为 None 然后失败。现在显式检测到此条件。

    This change is also backported to: 0.8.6

  • [orm] [bug]

    已从中删除过时的名称 sqlalchemy.orm.interfaces.__all__ 并用当前名称刷新,以便 import * 从这个模块再次工作。

    This change is also backported to: 0.8.6

    References: #2975

  • [orm] [bug]

    修正了一个非常老的行为,其中一对多发出的延迟负载可能不适当地拉入父表,并且还返回基于父表中的内容不一致的结果,当primaryjoin包含对父表的某种鉴别器时,例如 and_(parent.id == child.parent_id, parent.deleted == False) . 虽然这种初级联接对一对多没有多大意义,但当应用于多对一的一侧时,它稍微更为常见,而一对多则是由一个backref产生的。正在从加载行 child 在这种情况下 parent.deleted == False 就像在查询中一样,从而将其拉入FROM子句并执行笛卡尔积。新行为现在将根据需要替换该参数的本地“parent.deleted”值。尽管通常情况下,现实世界中的应用程序可能希望在任何情况下对O2M端使用不同的PrimaryJoin。

    References: #2948

  • [orm] [bug]

    改进了对“如何从A联接到B”的检查,这样,当一个表具有多个针对父表的复合外键时, relationship.foreign_keys 参数将被正确地解释,以解决歧义;以前,此条件会导致存在多个FK路径,而事实上,foreign_-keys参数应确定预期的路径。

    References: #2965

  • [orm] [bug]

    增加了对尚未记录的 insert=Trueevent.listen() 使用映射器/实例事件。

  • [orm] [bug] [engine]

    修复了事件设置为在类级别侦听的错误(例如 MapperClassManager 级别,与单个映射类上的不同,以及 Connection )这也使得内部参数转换(大部分在这些类别中)无法移除。

    References: #2973

  • [orm] [bug]

    从0.8开始的固定回归,其中使用类似选项 orm.lazyload() 使用“通配符”表达式,例如 "*" 如果查询不包含任何实际实体,则将引发断言错误。这个断言适用于其他情况,无意中发现了这个。

  • [orm] [bug] [sqlite]

    对sqlite“join rewriting”的更多修复;修复来自 #2967 在0.9.3发布之前就实现了,它影响了联合中包含嵌套联接的情况。”join rewriting”是一个具有广泛可能性的特性,也是我们多年来引入的第一个复杂的“SQL重写”特性,因此我们使用它进行了很多迭代(不像在0.2/0.3系列中的急加载,在0.4/0.5中的多态加载)。我们很快就要到了,谢谢你和我们在一起。)

    References: #2969

engine

  • [engine] [feature]

    为方言级事件添加了一些新的事件机制;最初的实现允许事件处理程序重新定义特定的机制,通过这些机制,任意方言可以调用DBAPI光标上的execute()或executeMany()。此时,新事件(半公开和实验性)支持一些即将到来的与事务相关的扩展。

  • [engine] [feature]

    事件侦听器现在可以与 Engine ,一个或多个之后 Connection 已创建对象(如通过ORM Session 或者通过显式连接),监听器将从这些连接中接收事件。以前,性能问题推动了事件从 EngineConnection 仅在初始化时,但我们已经内联了一系列条件检查,以便在不进行任何附加函数调用的情况下实现这一点。

    References: #2978

  • [engine] [bug]

    对力学的重大改进 Engine 当检测到“disconnect”(断开连接)条件时,回收连接池;不丢弃池并显式关闭连接,而是保留池并更新“generational”(代)时间戳以反映当前时间,从而导致下次签出时回收所有现有连接。这大大简化了回收过程,消除了等待旧池的“唤醒”连接尝试的需要,并消除了在回收操作期间可以创建许多立即丢弃的“池”对象的争用条件。

    References: #2985

  • [engine] [bug]

    这个 ConnectionEvents.after_cursor_execute() 现在为的“_cursor_execute()”方法发出事件 Connection ;这是“快速”执行器,用于执行序列在insert语句之前执行,以及用于方言启动检查(如unicode返回、charset等)。 ConnectionEvents.before_cursor_execute() 事件已在此处调用。“ExecuteMany”标志现在在此处始终设置为false,因为此事件始终对应于单个执行。以前,如果我们代表executeMany insert语句执行操作,则标志可能为true。

sql

  • [sql] [feature]

    添加了对布尔值的文本呈现的支持,例如“true”/“false”或“1”/“0”。

  • [sql] [feature]

    添加了新功能 schema.conv() ,其目的是将约束名标记为已应用命名约定。从Alembic 0.6.4开始,Alembic迁移将使用此令牌来呈现迁移脚本中的约束,这些脚本中的名称标记为已经受命名约定约束。

  • [sql] [feature]

    架构级构造的新方言级关键字参数系统已得到增强,以帮助现有的依赖于在构造中添加特殊关键字参数的方案。

    例如,结构 Index 将再次接受 Index.kwargs 施工后收集:

    idx = Index('a', 'b')
    idx.kwargs['mysql_someargument'] = True

    为了适应在构建时允许自定义参数的用例,需要 DialectKWArgs.argument_for() 方法现在允许此注册:

    Index.argument_for('mysql', 'someargument', False)
    
    idx = Index('a', 'b', mysql_someargument=True)

    References: #2866, #2962

  • [sql] [bug]

    固定错误 tuple_() 构造,其中基本上第一个SQL表达式的“类型”将作为比较元组值的“比较类型”;这在某些情况下会产生不适当的“类型强制”效果,例如,具有字符串和二进制值组合的元组不正确地将目标值强制为二进制,即使这不是在左边。 tuple_() 现在期望在其值列表中包含异构类型。

    This change is also backported to: 0.8.6

    References: #2977

  • [sql] [bug]

    修正了0.9回归,其中 Table 未能正确反映的内容将不会从父级中删除。 MetaData ,即使处于无效状态。Pullreq由Roman Podoliaka提供。

    References: #2988

  • [sql] [bug]

    MetaData.naming_convention 此功能现在也将应用于 CheckConstraint 直接与 Column 而不是仅仅在 Table .

  • [sql] [bug]

    修正了新的错误 MetaData.naming_convention 使用 "%(constraint_name)s" 对于由布尔或枚举类型生成的约束,令牌将加倍,并且总体重复事件将导致 "%(constraint_name)s" 继续复利的象征。

    References: #2991

  • [sql] [bug]

    调整了当没有名称时将名称应用于.c集合的逻辑 BindParameter 接收,例如通过 sql.literal() 或类似;bind参数的“key”用作.c.中的key,而不是呈现的名称。由于这些绑定在任何情况下都具有"匿名"名称,因此如果个别绑定参数未标记,则允许它们在可选范围内具有自己的名称。

    References: #2974

  • [sql] [bug]

    对如何 FromClause.c 集合在出现重复列时的行为。发出警告并用相同名称替换旧列的行为在某种程度上仍然存在;特别是替换是为了保持向后兼容性。但是,替换的列仍然与 c 集合中的集合 ._all_columns ,由别名和联合等构造使用,以处理 c 更倾向于列列表中的实际内容,而不是唯一的键名称集。这有助于在联合等情况下使用具有相同命名列的SELECT语句,以便联合可以按位置向上匹配列,而且还可能 FromClause.corresponding_column() 仍然可以在这里使用(它现在可以返回一个列,该列只能在selectable.c.u allu列中使用,而不能以其他方式命名)。由于我们仍需要确定此列表的最终位置,因此新集合将加下划线。理论上,它将成为ITER(selectable.c)的结果,但是这意味着迭代的长度将不再匹配keys()的长度,并且需要检查该行为。

    References: #2974

  • [sql] [bug]

    新问题已修复 TextClause.columns() 方法,其中不保留给定位置列的顺序。这可能会对位置情况(如应用结果)产生潜在影响。 TextAsFrom 反对联合。

postgresql

  • [postgresql] [feature]

    已启用psycopg2 dbapi的“健全多行计数”检查,因为从psycopg2 2.0.9开始似乎支持这种检查。

    This change is also backported to: 0.8.6

  • [postgresql] [bug]

    修正了由0.8.5/0.9.3版本的兼容性增强引起的回归,即针对8.1、8.2系列的PostgreSQL版本的索引反射再次中断,围绕着有问题的int2vector类型。虽然Int2Vector支持从8.1开始的数组操作,但显然它只支持从8.3开始强制转换为varchar。

    This change is also backported to: 0.8.6

    References: #3000

mysql

  • [mysql] [bug]

    调整了mysql connector python的设置;在py2k中,“支持unicode语句”标志现在为false,以便sqlAlchemy将 SQL字符串 (注: not 参数)发送到数据库前的字节数。这似乎允许所有与Unicode相关的MySQL连接器测试通过,包括那些使用非ASCII表/列名称的测试,以及一些在cursor.executemany()下使用Unicode的文本类型测试。

oracle

  • [oracle] [feature]

    添加了新的引擎选项 coerce_to_unicode=True 到cx-oracle方言,它将cx-oracle outputtypehander方法恢复为python 2下的python-unicode转换,这在0.9.2中由于 #2911 . 尽管存在性能方面的问题,一些用例还是希望Unicode强制对于所有字符串值都是无条件的。拉请求由Christoph Zwerschke提供。

    References: #2911

  • [oracle] [bug]

    添加了新的数据类型 oracle.DATE ,它是 DateTime . 由于Oracle本身没有“datetime”类型,因此它只有 DATE ,这里适当的是 DATE 在Oracle方言中存在的类型是 DateTime . 就类型的行为而言,这个问题并没有改变任何东西,因为在任何情况下,数据转换都由DBAPI处理,但是改进的子类布局将有助于检查类型是否与跨数据库兼容的用例。还删除了大写 DATETIME 从Oracle方言中,因为此类型在该上下文中不起作用。

    References: #2987

misc

  • [bug] [ext]

    修复了可变扩展中的错误以及 attributes.flag_modified() 如果已将属性重新分配给自身,则不会传播更改事件。

    This change is also backported to: 0.8.6

    References: #2997

  • [bug] [automap] [ext]

    添加了对automap的支持,用于在联接继承关系中的两个类之间不应创建关系的情况,用于将子类链接回超类的外键。

    References: #3004

  • [bug] [tests]

    修正了一些错误 u'' 阻止测试通过PY3.2的字符串。补丁提供arfrever frehtes taifersar arahesis。

    References: #2980

  • [bug] [pool]

    解决了小问题 SingletonThreadPool 在“清理”过程中,要返回的当前连接可能会被无意中清理掉。补丁程序由JD23提供。

  • [bug] [ext] [py3k]

    修复了关联代理中分配空切片(例如 x[:] = [...] )在PY3K上会失败。

  • [bug] [ext]

    修正了由 #2810 这导致用户提供的“getter”不再接收 None 从不存在的目标获取标量值时。此更改引入的“无”检查现在移动到默认getter中,因此用户提供的getter也将再次收到“无”的值。

    References: #2810

  • [bug] [examples]

    修复了版本控制的历史记录示例中的错误,在该示例中,列级插入默认值将阻止写入空值的历史记录值。

0.9.3

Released: February 19, 2014

orm

  • [orm] [feature]

    新增 MapperEvents.before_configured() 允许在开始时发生事件的事件 configure_mappers() 以及 __declare_first__() 在声明性内钩住以补足 __declare_last__() .

  • [orm] [bug]

    固定错误在哪里 Query.get() 无法持续提高 InvalidRequestError 当对具有现有条件的查询调用时,当给定的标识已存在于标识映射中时,将调用。

    This change is also backported to: 0.8.5

    References: #2951

  • [orm] [bug] [sqlite]

    修复了sqlite“join rewriting”中的错误,其中exists()构造的使用将无法正确重写,例如exists映射到复杂嵌套联接方案中的column_属性时。还修复了一个稍微相关的问题,即如果目标是别名表(而不是单个别名列),则select语句的columns子句的join重写将失败。

    References: #2967

  • [orm] [bug]

    修复了0.9回归,其中应用于基类(如propagate=true标志的声明性基)的ORM实例或映射器事件将无法应用于现有的映射类,这些类也使用了断言导致的继承。此外,修复了在删除此类事件期间可能发生的属性错误,具体取决于首次分配的方式。

    References: #2949

  • [orm] [bug]

    改进了复合属性的初始化逻辑,以便调用 MyClass.attribute 不会要求出现“配置映射器”步骤,例如,它只会在不引发任何错误的情况下工作。

    References: #2935

  • [orm] [bug]

    有关的更多问题 [标签:2932] 首先在0.9.2中解决,其中使用表单的列键 <tablename>_<columnname> 与文本中的别名列匹配在ORM级别仍然不匹配,这最终是由于核心列匹配问题。添加了其他规则,以便 _label 在使用 TextAsFrom 构造或使用文本列。

    References: #2932

orm declarative

engine

  • [engine] [bug] [pool]

    修正了由 #2880 其中,从池返回连接的新并发能力意味着“First_Connect”事件现在也不再同步,从而导致即使在最小并发情况下也出现方言MIS配置。

    This change is also backported to: 0.8.5

    References: #2880, #2964

sql

  • [sql] [bug]

    修复了调用的错误 Insert.values() 如果列表或元组为空,则会引发索引错误。它现在生成一个空的插入结构,就像使用空字典时一样。

    This change is also backported to: 0.8.5

    References: #2944

  • [sql] [bug]

    固定错误在哪里 in_() 如果错误地传递了一个列表达式,其comparator包含 __getitem__() 方法,例如使用 postgresql.ARRAY 类型。

    This change is also backported to: 0.8.5

    References: #2957

  • [sql] [bug]

    修正了新的“命名约定”功能中的回归,如果外键中引用的表包含模式名,那么约定将失败。托马斯法沃的请求。

  • [sql] [bug]

    修复了所谓的“文本呈现”的错误 bindparam() 如果使用可调用的而不是直接值构造绑定,则构造将失败。这阻止了ORM表达式使用“literal_binds”编译器标志进行呈现。

postgresql

  • [postgresql] [feature]

    增加了 TypeEngine.python_type 方便存取器 postgresql.ARRAY 类型。拉请求由Alexey Terentev提供。

  • [postgresql] [bug]

    向psycopg2 disconnect detection添加了一条额外的消息,“无法向服务器发送数据”,补充了现有的“无法从服务器接收数据”,用户已经观察到。

    This change is also backported to: 0.8.5

    References: #2936

  • [postgresql] [bug]

    对PostgreSQL的旧版本(8.1之前的版本)以及其他潜在的PG引擎(如Redshift)上的PostgreSQL反射行为的支持已经得到了改进(假设Redshift报告的版本小于8.1)。“indexes”和“primary keys”的查询依赖于检查所谓的“int2vector”数据类型,它拒绝强制8.1之前的数组,从而导致查询中使用的“any()”运算符出现故障。广泛的googling已经找到了非常黑客,但是pg核心开发者查询推荐在pg版本<8.1的时候使用,所以索引和主键约束反射现在可以在这些版本上工作。

    This change is also backported to: 0.8.5

  • [postgresql] [bug]

    修改了这个非常老的问题,更新了postgresql“get primary key”反射查询,以考虑重命名的primary key约束;更新的查询在非常老的postgresql版本(如版本7)上失败,因此在检测到服务器版本信息<(8,0)时,会恢复旧查询。

    This change is also backported to: 0.8.5

    References: #2291

  • [postgresql] [bug]

    将服务器版本检测添加到新添加的方言启动查询“show standard_conformity_strings”;由于该变量是从pg 8.2开始添加的,因此我们跳过对报告早于该版本字符串的pg版本的查询。

    References: #2946

mysql

  • [mysql] [feature]

    添加了新的特定于MySQL的 mysql.DATETIME 其中包括分数秒支持;也增加了分数秒支持 mysql.TIMESTAMP . DBAPI支持是有限的,尽管MySQL连接器/python已知支持小数秒。补丁由Geert JM Vanderkelen提供。

    This change is also backported to: 0.8.5

    References: #2941

  • [mysql] [bug]

    增加了对 PARTITION BYPARTITIONS mysql表关键字,指定为 mysql_partition_by='value'mysql_partitions='value'Table . 拉车请求,马库斯·麦库迪提供。

    This change is also backported to: 0.8.5

    References: #2966

  • [mysql] [bug]

    修复了阻止基于mysqldb的方言(例如pymysql)在py3k中工作的错误,因为py3k的更严格的值比较规则,“connection charset”检查将失败。所讨论的调用在任何情况下都没有考虑数据库版本,因为此时服务器版本仍然为零,因此该方法已被简化为依赖connection.character_set_name()。

    This change is also backported to: 0.8.5

    References: #2933

  • [mysql] [bug] [cymysql]

    修复了cymysql方言中版本字符串(如 '33a-MariaDB' 无法正确分析。拉式请求由Matt Schmidt提供。

    References: #2934

sqlite

  • [sqlite] [bug]

    当反射类型时,sqlite方言现在将跳过不支持的参数;例如,如果它遇到类似 INTEGER(5) , the INTEGER 根据检测到的 TypeError 第一次尝试。

  • [sqlite] [bug]

    已将支持添加到sqlite类型反射,以完全支持http://www.sqlite.org/datatype3.html中指定的“类型关联”协定。在这个方案中,关键字如下 INTCHARBLOBREAL 位于类型名中,通常将类型与五个关联中的一个关联。拉请求提供埃里希布鲁姆。

    参见

    类型反射

misc

  • [feature] [examples]

    在版本化行示例中添加了可选的“changed”列,并支持版本化时 Table 有明确的 schema 争论。请求请求由jplaverdure提供。

  • [bug] [ext]

    修正了错误 AutomapBase 新automap扩展的类将失败,如果类被预先安排在单个或可能连接的继承模式中。修复的联接继承问题也可能在使用时应用 DeferredReflection 也。

0.9.2

Released: February 2, 2014

orm

  • [orm] [feature]

    添加了一个新参数 Operators.op.is_comparison . 此标志允许来自 Operators.op() 被视为“比较”运算符,因此可用于自定义 relationship.primaryjoin 条件。

  • [orm] [feature]

    为提供 join() 建设为目标 relationship.secondary 为了创造非常复杂的 relationship() 加入条件。更改包括对查询联接的调整、联接的预加载以不呈现select子查询、对lazy加载的更改以使“secondary”目标正确包含在select中,以及对声明性的更改以更好地支持以类为目标的join()对象的规范。

    新的用例有些实验性,但是增加了一个新的文档部分。

  • [orm] [bug]

    修正了将迭代器对象传递给 class_mapper() 或者类似的,错误在字符串格式上无法呈现。凯尔·斯塔克提供的Pullreq。

    This change is also backported to: 0.8.5

  • [orm] [bug]

    修正了新的错误 TextAsFrom 构建何处 Column -定向行查找与临时行查找不匹配 ColumnClause 对象即 TextAsFrom 生成,从而使其不能用作 Query.from_statement() . 也固定 Query.from_statement() 机修工不能搞错 TextAsFrom 对于一个 Select 构建。这个bug也是0.9回归,因为 Text.columns() 调用方法以适应 text.typemap 争论。

    References: #2932

  • [orm] [bug]

    添加了一个新的指令,用于在属性“set”操作的范围内禁用autoflush,以防属性需要延迟加载“old”值,例如在替换一对一值或某些类型的多对一值时。否则,此时将在属性为“无”时发生刷新,并可能导致空冲突。

    References: #2921

  • [orm] [bug]

    修正了0.9回归,其中自动混叠应用于 Query 在选择或联接别名的其他情况下(如联接表继承),如果用户定义的 Column 在表达式中使用了子类。在这种情况下,子类将无法传播ORM特定的“注释”,以及适应所需的注释。“表达式注释”系统已针对这种情况进行了修正。

    References: #2918

  • [orm] [bug]

    修复了一个涉及新的扁平连接结构的bug joinedload() (从而导致连接的预加载中的回归)以及 aliased()flat=True 标记和联接的表继承;基本上,跨“父联接子”实体使用不同的路径到达目标类的多个联接不会形成正确的on条件。在计算连接的“左侧”的机制中所做的调整/简化(如果是别名,则在类中加入)修复了该问题。

    References: #2908

engine

  • [engine] [feature] [pool]

    添加了新的池事件 PoolEvents.invalidate() . 当要将DBAPI连接标记为“无效”并从池中丢弃时调用。

sql

  • [sql] [feature]

    补充 MetaData.reflect.**dialect_kwargs 为所有用户支持方言级反射选项 Table 反射的对象。

  • [sql] [feature]

    添加了一个新功能,允许将自动命名约定应用到 ConstraintIndex 对象。基于wiki中的一个方法,新功能使用模式事件设置名称,因为不同的模式对象相互关联。然后,这些事件通过一个新参数公开一个配置系统。 MetaData.naming_convention . 此系统允许为每个上的约束和索引生成简单的和自定义的命名方案。 -MetaData 基础。

    References: #2923

  • [sql] [feature]

    现在可以在上指定选项 PrimaryKeyConstraint 对象,与表中列的规范无关 primary_key=True 标志;使用 PrimaryKeyConstraint 对象中没有列以实现此结果。

    以前,一个明确的 PrimaryKeyConstraint 将具有标记为的列的效果 primary_key=True 被忽略;由于不再是这种情况, PrimaryKeyConstraint 现在将断言一种样式或另一种样式用于指定列,或者如果两种样式都存在,则表示列列表完全匹配。如果 PrimaryKeyConstraint 而在 Table 标记为 primary_key=True 如果存在,将发出警告,并且仅从 PrimaryKeyConstraint 就像以前版本中的情况一样。

    References: #2910

  • [sql] [feature]

    模式构造和某些SQL构造接受方言特定关键字参数的系统已得到增强。该系统通常包括 TableIndex 结构,接受各种方言特有的参数,如 mysql_enginepostgresql_where 以及构造 PrimaryKeyConstraintUniqueConstraintUpdateInsertDelete 以及新增加的Kwarg能力 ForeignKeyConstraintForeignKey . 变化是参与方言现在可以为这些构造指定可接受的参数列表,如果为特定方言指定的关键字无效,则允许引发参数错误。如果无法识别关键字的方言部分,则只会发出警告;虽然系统将实际使用Setuptools入口点来定位非本地方言,但在卸载第三方方言的环境中使用特定方言参数的用例仍然受支持。方言也必须明确地选择加入这个系统,以便不使用这个系统的外部方言不会受到影响。

    References: #2866

  • [sql] [bug]

    行为 Table.tometadata() 已调整,以便 ForeignKey 除非该架构与父表的架构匹配,否则不会更改。也就是说,如果一个表“schema_a.user”有一个“schema_.order.id”的外键,不管“schema”参数是否传递给 Table.tometadata() . 但是,如果表“schema_a.user”引用“schema_a.order.id”,则将在父表和引用表上更新“schema_a”的存在。这是一个行为变化,因此不太可能被反向转换为0.8;但是,假设之前的行为是非常错误的,并且不太可能有人依赖它。

    此外,还添加了一个新参数 Table.tometadata.referred_schema_fn . 这引用了一个可调用函数,该函数将用于确定任何 ForeignKeyConstraint 在tometadata操作中遇到。此可调用项可用于恢复到以前的行为,或自定义在每个约束的基础上如何处理引用的架构。

    References: #2913

  • [sql] [bug]

    修正了二进制类型在某些情况下如果与“测试”方言(如默认方言或没有DBAPI的其他方言)一起使用会失败的错误。

  • [sql] [bug] [py3k]

    修复了“文本绑定”无法与二进制类型的绑定参数一起使用的错误。类似但不同的问题在0.8中得到了解决。

  • [sql] [bug]

    修正了ORM使用的“注释”系统泄漏到标准函数在 sqlalchemy.sql.functions ,如 func.coalesce()func.max() . 在ORM属性中使用这些函数,从而生成它们的注释版本,可能会损坏SQL中呈现的实际函数名。

    References: #2927

  • [sql] [bug]

    修正了0.9回归,其中新的可排序支持 RowProxy 将导致 TypeError 当与非元组类型进行比较时,因为它试图无条件地将tuple()应用于“其他”对象。现在已经在上实现了所有的python比较运算符 RowProxy ,使用一种方法来保证比较系统与元组的比较系统相同,“其他”对象只有在它是rowproxy实例时才被强制执行。

    References: #2848, #2924

  • [sql] [bug]

    A UniqueConstraint 创建时使用 Table 其中没有列的将被跳过。德雷克·哈兰提供的Pullreq。

  • [sql] [bug] [orm]

    修复了仅在MySQL上可用的多表“update..from”构造,以便在多个表中以相同的名称正确呈现set子句。这还将set子句中用于绑定参数的名称更改为仅用于非主表的“<table name>”;因为通常使用 Column 直接对象这不应该对应用程序产生影响。修复对两者都有效 Table.update() 以及 Query.update() 在ORM中。

    References: #2912

schema

  • [schema] [bug]

    恢复 sqlalchemy.schema.SchemaVisitor.schema 模块。Pullreq礼遇Sean Dague。

postgresql

  • [postgresql] [feature]

    添加了新的方言级别参数 postgresql_ignore_search_path ;此论点被双方接受 Table 以及由 MetaData.reflect() 方法。对PostgreSQL使用时,指定远程架构名称的外键引用表将保留该架构名称,即使该名称存在于 search_path ;0.7.3之后的默认行为是 search_path 不会复制到反射 ForeignKey 对象。文档已更新,以详细描述 pg_get_constraintdef() 功能和如何 postgresql_ignore_search_path 这个特性基本上决定了我们是否接受这个函数报告的模式限定。

    References: #2922

mysql

  • [mysql] [bug]

    在cymysql方言中添加了一些缺少的方法,包括_get_server_version_info()和_detect_charset()。Pullreq由Hajime Nakagami提供。

    This change is also backported to: 0.8.5

  • [mysql] [bug] [sql]

    为所谓的“向下适应”的SQL类型增加了新的测试覆盖率,其中一个更具体的类型适应了一个更通用的类型-这个用例需要一些第三方工具,如 sqlacodegen . 此测试套件中需要修复的特定情况是 mysql.ENUM 向下投射到 types.Enum 以及被强制转换为通用日期类型的sqlite日期类型。这个 adapt() 在这里需要更具体的方法来抵消“全部捕获”的移除。 **kwargs 基地集合 TypeEngine 在0.9中删除的类。

    References: #2917

  • [mysql] [bug]

    mysql cast编译现在考虑了字符串类型的各个方面,如“charset”和“collation”。尽管MySQL希望所有基于字符的强制转换调用都使用char类型,但我们现在在强制转换时创建一个真正的char对象,并复制它所具有的所有参数,以便像 cast(x, mysql.TEXT(charset='utf8')) 将渲染 CAST(t.col AS CHAR CHARACTER SET utf8) .

  • [mysql] [bug]

    添加了新的“unicode返回”检测到mysql方言和默认方言系统,这样任何方言都可以向第一次连接时的“does dbapi是否直接返回unicode?”添加额外的“测试”。检测。在本例中,我们将特别针对带有显式“utf8_bin”排序类型的“utf8”编码添加一个检查(在检查该排序是否可用之后),以测试mysqldb 1.2.3版中观察到的某些错误的unicode行为。虽然mysqldb已经从1.2.4版解决了这个问题,但是这里的检查应该防止回归。更改还允许“unicode”检查登录到引擎日志中,这在以前不是这样的。

    References: #2906

  • [mysql] [bug] [engine] [pool]

    Connection 现在关联一个新的 RootTransactionTwoPhaseTransaction 立即 _ConnectionFairy 作为该事务范围的“重置处理程序”,它接管为的“返回时重置”行为调用commit()或rollback()的任务。 Pool 如果交易没有以其他方式完成。这解决了这样一个问题,即当连接在没有显式回滚或提交的情况下关闭时,像mysql两相这样的挑剔事务将被正确关闭(例如,在这种情况下不再引发“xaer-rmfail”-注意,这只会显示在日志中,因为异常不会在池重置中传播)。例如,当使用ORM时,会出现此问题。 Session 具有 twophase 设置,然后 Session.close() 在没有显式回滚或提交的情况下调用。当使用 Session 对象处于非自动提交模式,无论该会话如何被丢弃。感谢Jeff Dairiki和Laurence Rowe在这里隔离了这个问题。

    References: #2907

sqlite

  • [sqlite] [bug]

    修复了SQLite编译器未能将编译器参数(如“literal binds”)传播到转换表达式中的错误。

mssql

  • [mssql] [feature]

    增加期权 mssql_clusteredUniqueConstraintPrimaryKeyConstraint 构造;在SQL Server上,这会添加 CLUSTERED 关键字到DDL中的约束构造。德雷克·哈兰提供的Pullreq。

oracle

  • [oracle] [bug]

    据观察,在python 2.xx中使用cx-oracle“outputtypehander”将字符串值强制为unicode是非常昂贵的;即使在传递python时cx-oracle是用c编写的 unicode 原语到cursor.var()并与输出处理程序关联,库将每个转换计数为一个python函数调用,并记录所有必需的开销;这 尽管 事实上,当在python 3中运行时,所有字符串也被无条件地强制为unicode,但它确实是这样的。 not 产生这种开销,这意味着cx-oracle无法在py2k中使用performant技术。由于sqlAlchemy无法轻易地为这种类型的处理程序按列选择,因此处理程序被无条件地组装,从而将开销添加到所有字符串访问中。

    所以这个逻辑已经被SQLAlchemy自己的unicode转换系统所取代,它现在只在py2k中对作为unicode请求的列生效。当使用C扩展时,sqlAlchemy的系统似乎比cx-oracle快2-3倍。此外,sqlAlchemy的unicode转换得到了增强,当需要“条件”转换器时(现在需要用于oracle后端),对“already unicode”的检查现在在C中执行,不再引入大量开销。

    此更改对cx_Oracle后端有两个影响。一个是,py2k中的字符串值(这些值不是用unicode类型或convert-unicode=true专门请求的)现在将返回为 str 不是 unicode -这种行为类似于后端系统,比如mysql。此外,如果C扩展是 not 现在,每列的isInstance()检查都有额外的开销。这种折衷是因为它可以解决问题,并且不再给可能是非Unicode字符串的大多数Oracle结果列带来性能负担。

    References: #2911

misc

  • [bug] [examples]

    在“history_meta”示例中添加了一个调整,在该示例中,如果卸载了关系,对绑定到关系的属性的“history”的检查将不再发出任何SQL。

  • [bug] [pool]

    的参数名 PoolEvents.reset() 事件已重命名为 dbapi_connectionconnection_record 以保持与所有其他池事件的一致性。在任何情况下,此相对较新且很少使用的事件的任何现有侦听器都将使用位置样式来接收参数。

  • [bug] [cextensions] [py3k]

    修复了PY3K中的C扩展使用错误的API来指定顶级模块函数的问题,该函数在python 3.4b2中中断。py3.4b2将pymodinit_func更改为返回“void”,而不是 PyObject * 因此,我们现在确保使用“pymodinit_func”而不是 PyObject * 直接。拉请求由CGohlke提供。

0.9.1

Released: January 5, 2014

orm

  • [orm] [feature] [extensions]

    一个新的, 实验的 延伸 sqlalchemy.ext.automap 添加。这个扩展扩展扩展了声明性的功能以及 DeferredReflection 类以生成自动生成映射类的基类 和关系 基于表元数据。

  • [orm] [bug] [events]

    固定回归,其中使用 functools.partial() 对于事件系统,由于在其上使用inspect.getargspec()以检测某些事件的旧调用签名,因此将导致递归溢出,显然无法对部分对象执行此操作。相反,我们跳过传统检查并采用现代风格;检查本身现在只发生在sessionEvents.after“批量更新”和sessionEvents.after“批量删除”事件中。如果分配给“部分”事件侦听器,这两个事件将需要新的签名样式。

    References: #2905

  • [orm] [bug]

    修正了使用新的 Session.info 如果 .info 参数只传递给 sessionmaker 创建调用,但不调用对象本身。Robin Schoonover提供。

  • [orm] [bug]

    修正了在基于名称设置backref时,不根据正确的字符串类检查给定名称的回归,因此导致错误“太多值无法解包”。这与PY3K转换有关。

    References: #2901

  • [orm] [bug]

    固定的回归,我们在说query(b).join(b.cs)时显然仍然创建了一个隐式别名,其中“c”是一个joined inh类;但是,这个隐式别名的创建只考虑了直接的左侧,而不是沿着同一基的不同joined inh子类的更长的连接链。在这种情况下,只要我们仍然隐式地使用别名,行为就会被拨回一点,这样在更广泛的情况下,它就会对右侧使用别名。

    References: #2903

orm declarative

  • [bug] [declarative] [orm]

    修复了使用时极不可能出现的内存问题 DeferredReflection 定义等待反射的类,如果在 DeferredReflection.prepare() 方法被调用以反映和映射类,对类的强引用将保留在声明性内部。这个“要映射的类”的内部集合现在对类本身使用弱引用。

  • [bug] [declarative] [orm]

    一种准回归,显然在0.8中,可以将声明性的类级属性设置为直接引用 InstrumentedAttribute 在超类或类本身上,它的行为或多或少类似于同义词;在0.9中,这无法建立足够的簿记来跟上更自由化的backref逻辑 #2789 . 尽管从未直接考虑过这个用例,但是它现在被“setattr()”级别的声明性和设置子类时检测到,并且镜像/重命名的属性现在被设置为 synonym() 相反。

    References: #2900

sql

  • [sql] [feature]

    连词如 and_()or_() 现在可以接受python生成器作为单个参数,例如:

    and_(x == y for x, y in tuples)

    这里的逻辑寻找一个单一的参数 *args 其中第一个元素是 types.GeneratorType .

schema

0.9.0

Released: December 30, 2013

orm

  • [orm] [feature]

    这个 exc.StatementError 或者与DBAPI相关的子类现在可以容纳关于异常“原因”的附加信息;或者 Session 现在,当异常发生在自动刷新中时,向它添加一些细节。采用这种方法,而不是结合 FlushError 使用python 3风格的“链式异常”方法,以保持与py2k代码以及已经捕获的代码的兼容性 IntegrityError 或者类似的。

  • [orm] [feature] [backrefs]

    添加了新参数 include_backrefs=Truevalidates() 函数;当设置为false时,如果事件被初始化为从另一侧对属性操作的backref,则不会触发验证事件。

    References: #1535

  • [orm] [feature]

    用于指定 FOR UPDATE A的子句 SELECT 与新的一起添加 Query.with_for_update() 方法,以补充新的 GenerativeSelect.with_for_update() 方法。拉请求由Mario Lassnig提供。

  • [orm] [bug]

    调整 subqueryload() 确保查询在加载过程开始后运行的策略;这使得子查询加载优先于其他加载程序,这些加载程序可能因错误时间的其他急/不加载情况而访问同一属性。

    This change is also backported to: 0.8.5

    References: #2887

  • [orm] [bug]

    修复了使用从表继承到基表上的select/alias的联接表时出现的错误,其中pk列的名称也不相同;持久性系统在插入时无法将主键值从基表复制到继承表。

    This change is also backported to: 0.8.5

    References: #2885

  • [orm] [bug]

    composite() 当传递的列/属性(名称)未解析为列或映射的属性(如错误的元组)时,将引发信息性错误消息;以前引发了未绑定的本地。

    This change is also backported to: 0.8.5

    References: #2889

  • [orm] [bug]

    修正了由 #2818 如果正在生成的exists查询将为具有两个相同命名列的语句生成“columns being replaced”警告,因为内部select不会设置use_labels。

    This change is also backported to: 0.8.4

    References: #2818

  • [orm] [bug] [collections] [py3k]

    增加了对python 3方法的支持 list.clear() ORM采集仪器系统内;拉取请求由Eduardo Schettino提供。

  • [orm] [bug]

    一些改进 AliasedClass 对于描述符(如混合、同义词、复合、用户定义的描述符等)进行构造。进行的属性适应已经变得更加健壮,这样,如果一个描述符返回另一个被检测的属性,而不是复合的SQL表达式元素,操作仍将继续。此外,“自适应”运算符将保留其类;以前,类从 InstrumentedAttributeQueryableAttribute (超类)将与python的操作系统交互,以便 aliased(MyClass.x) > MyClass.x 会自己倒过来读 myclass.x < myclass_1.x . 调整后的属性也将引用新的 AliasedClass 作为其母公司,这在以前并不总是如此。

    References: #2872

  • [orm] [bug]

    这个 viewonly 旗上 relationship() 现在将阻止代表目标属性写入属性历史记录。这会导致对象没有被写入session.dirty列表(如果它是可变的)。以前,该对象将出现在session.dirty中,但在刷新期间不会代表修改后的属性进行任何更改。该属性仍然会发出backref事件和用户定义的事件等事件,并且仍然会收到backrefs的突变。

    References: #2833

  • [orm] [bug]

    添加了对新的支持 Session.info 属性到 scoped_session .

  • [orm] [bug]

    修正了使用新的 Bundle 对象将导致 Query.column_descriptions 属性失败。

  • [orm] [bug] [sql] [sqlite]

    修正了由连接重写特性引入的回归 #2369#2587 如果嵌套联接的一侧已经有别名,则select将无法正确地转换外部的on子句;在ORM中,将select语句用作“secondary”表时可以看到这一点。

    References: #2858

orm declarative

  • [bug] [declarative] [orm]

    声明性执行额外检查以检测是否相同 Column 在不同属性下多次映射(通常应为 synonym() 或者如果两个或更多 Column 对象具有相同的名称,如果检测到此情况,将引发警告。

    References: #2828

  • [bug] [declarative] [orm]

    这个 DeferredReflection 类已被增强,以为a所引用的“secondary”表提供自动反射支持。 relationship() . "二级”,当指定为字符串表名或 Table 只有名称和 MetaDataDeferredReflection.prepare() 被称为。

    References: #2865

  • [bug] [declarative] [orm]

    修正了在py2k中,unicode文字在声明性使用中不能作为类或其他参数的字符串名称的错误。 relationship() .

engine

  • [engine] [feature]

    这个 engine_from_config() 函数已经得到了改进,这样我们就能够从字符串配置字典中解析特定于方言的参数。方言类现在可以提供自己的参数类型和字符串转换例程列表。然而,这个特性还没有被内置方言所使用。

    References: #2875

  • [engine] [bug]

    在上引发错误的DBAPI connect() 它不是dbapi.error的子类(例如 TypeErrorNotImplementedError 等)将传播未更改的异常。以前,特定于 connect() 例行程序都会不适当地通过方言的 Dialect.is_disconnect() 把它包装在 sqlalchemy.exc.DBAPIError . 它现在以与执行过程中相同的方式传播,而不做任何更改。

    This change is also backported to: 0.8.4

    References: #2881

  • [engine] [bug] [pool]

    这个 QueuePool 已增强,当现有连接尝试被阻止时不会阻止新的连接尝试。以前,新连接的生成是在监视溢出的块中序列化的;现在溢出计数器在连接进程本身之外的其关键部分中进行了更改。

    This change is also backported to: 0.8.4

    References: #2880

  • [engine] [bug] [pool]

    对等待池连接可用的逻辑做了轻微的调整,这样对于没有指定超时的连接池,它将每隔半秒钟从等待中中断一次,以检查所谓的“中止”标志,该标志允许服务生在整个连接池被转储时中断;通常服务生应该d由于一个notify_all()而中断,但在非常小的情况下,这个notify_all()可能会丢失。这是0.8.0中首次引入的逻辑的扩展,并且这个问题只是在压力测试中偶尔观察到的。

    This change is also backported to: 0.8.4

    References: #2522

  • [engine] [bug]

    修复了在DBAPI之前SQL语句将不正确地使用ASCII编码的错误。 StatementError 是在 Connection.execute() ,导致非ASCII语句的编码错误。字符串化现在保持在python unicode中,从而避免了编码错误。

    This change is also backported to: 0.8.4

    References: #2871

  • [engine] [bug]

    这个 create_engine() 常规及相关 make_url() 函数不再考虑 + sign to be a space within the password field. The parsing has been adjusted to match RFC 1738 exactly, in that both username and password expect only :, `` @ / 被编码。

    References: #2873

  • [engine] [bug]

    这个 RowProxy 对象现在可以在python中按常规元组排序;这是通过确保在 __eq__() 方法以及 __lt__() 方法。

    References: #2848

sql

  • [sql] [feature]

    新的改进 text() 构造,包括更灵活的设置绑定参数和返回类型的方法;特别是 text() 现在可以转换为完全From对象,可以使用新方法作为别名或CTE嵌入到其他语句中。 TextClause.columns() . 这个 text() 当构造在“文本绑定”上下文中编译时,构造还可以呈现“内联”绑定参数。

    References: #2877, #2882

  • [sql] [feature]

    用于指定 FOR UPDATE A的子句 SELECT 与新的一起添加 GenerativeSelect.with_for_update() 方法。与 for_update 的关键字参数 select() ,还包括对SQL标准的支持 FOR UPDATE OF 条款。ORM还包括一种新的对应方法 Query.with_for_update() . 拉请求由Mario Lassnig提供。

  • [sql] [feature]

    将返回的浮点值强制为python时使用的精度 Decimal 现在可以配置via字符串。旗 decimal_return_scale 现在所有人都支持 NumericFloat 类型,这将确保在转换为字符串时从本机浮点值中提取这么多的数字。如果不存在,类型将使用 .scale ,如果类型支持此设置,并且它不是“无”。否则,将使用原始默认长度10。

    References: #2867

  • [sql] [bug]

    修复了这样一个问题:主键列上有序列,但该列不是“自动递增”列,因为它有一个外键约束,或者 autoincrement=False 如果出现缺少主键值的insert,set将尝试为不支持序列的后端启动insert上的序列。这将发生在非序列后端,如sqlite、mysql。

    This change is also backported to: 0.8.5

    References: #2896

  • [sql] [bug]

    修正错误 Insert.from_select() 方法,在生成insert语句时不考虑给定名称的顺序,从而导致与给定select语句中的列名不匹配。还注意到 Insert.from_select() 这意味着不能使用python-side insert-defaults,因为该语句没有values子句。

    This change is also backported to: 0.8.5

    References: #2895

  • [sql] [bug]

    这个 cast() 当给定一个纯文本值时,函数现在将根据给定给强制转换的类型将给定类型应用于绑定参数侧的给定文本值,方法与 type_coerce() 功能。然而不像 type_coerce() ,仅当将非子句元素值传递给 cast() ;现有类型化构造将保留其类型。

  • [sql] [bug]

    这个 ForeignKey 类更积极地检查给定的列参数。如果不是字符串,则检查对象是否至少是 ColumnClause 或解析为一个的对象,并且 .table 属性(如果存在)是指 TableClause 或子类,而不是像 Alias . 否则,A ArgumentError 提高了。

    References: #2883

  • [sql] [bug]

    的优先级规则 ColumnOperators.collate() 已经修改了运算符,这样collate运算符的优先级现在低于比较运算符。这样做的效果是,应用于比较的排序规则不会在比较周围呈现括号,而该括号不是由后端(如mssql)解析的。对于那些通过应用程序解决问题的设置,更改是向后不兼容的。 Operators.collate() 比较表达式的单个元素,而不是整个比较表达式。

    References: #2879

  • [sql] [enhancement]

    BindParameter 不带值的已编译语句中存在,现在在错误消息中包含绑定参数的键名。

    This change is also backported to: 0.8.5

schema

  • [schema] [bug]

    修正了由 #2812 如果名称包含非ASCII字符,则表名和列名的repr()将失败。

    References: #2868

postgresql

  • [postgresql] [feature]

    使用新的 JSON 类型。非常感谢Nathan Rice实施和测试这一点。

    References: #2581

  • [postgresql] [feature]

    通过 postgresql.TSVECTOR 类型。拉请求提供努法尔易卜拉欣。

  • [postgresql] [bug]

    修正了索引反射在使用pypostgresql适配器时会错误解释indkey值的错误,该适配器将这些值作为列表返回,而不是psycopg2返回的字符串类型。

    This change is also backported to: 0.8.4

    References: #2855

  • [postgresql] [bug]

    现在,使用psycopg2 unicodearray扩展来处理具有psycopg2+普通“本机Unicode”模式的Unicode数组,与使用Unicode扩展的方式相同。

  • [postgresql] [bug]

    修正了枚举中的值没有为单引号转义的错误。请注意,对于手动转义单引号的现有解决方案,这是向后不兼容的。

    References: #2878

mysql

  • [mysql] [bug]

    对SQL类型在其中生成的系统的改进 __repr__() 尤其是对于mysql integer/numeric/character类型,它具有各种各样的关键字参数。这个 __repr__() 对于在迁移脚本中呈现python代码时使用alembic autogenerate非常重要。

    References: #2893

mssql

  • [mssql] [bug] [firebird]

    “asdecimal”标志用于 Float 类型现在可以与firebird以及mssql+pyodbc方言一起使用;以前没有进行十进制转换。

    This change is also backported to: 0.8.5

  • [mssql] [bug] [pymssql]

    在pymsql方言中为“disconnect”检查的消息列表中添加了“net lib error during connection reset by peer”消息。尊敬的约翰·安德森。

    This change is also backported to: 0.8.5

  • [mssql] [bug]

    修正了0.8.0中引入的错误,其中 DROP INDEX 如果索引位于备用架构中,则mssql中索引的语句将不正确地呈现;模式名/表名将被反转。该格式也已修改,以匹配当前的MSSQL文档。Derek Harland提供。

    This change is also backported to: 0.8.4

oracle

  • [oracle] [bug]

    使用cx_oracle将ora-02396“最大空闲时间”错误代码添加到“is disconnect”代码列表中。

    This change is also backported to: 0.8.4

    References: #2864

  • [oracle] [bug]

    修复了Oracle VARCHAR 没有长度的类型(例如 CAST 或类似)会错误地呈现 None CHAR 或者类似的。

    This change is also backported to: 0.8.4

    References: #2870

firebird

  • [firebird] [bug]

    火鸟方言将引用以下划线开头的标识符。由Treeve Jelbert提供。

    This change is also backported to: 0.8.5

    References: #2897

  • [firebird] [bug]

    修复了Firebird索引反射中的错误,其中索引中的列没有正确排序;它们现在按RDB$字段位置排序。

    This change is also backported to: 0.8.5

  • [firebird] [bug]

    已将Firebird使用的查询更改为列出要从中查询的表和视图名称。 rdb$relations 视图而不是 rdb$relation_fieldsrdb$view_relations 意见。许多常见问题解答和博客中都提到了旧查询和新查询的变体,但是新查询直接取自“Firebird常见问题解答”,这似乎是最官方的信息来源。

    References: #2898

misc

  • [removed]

    “Informix”和“InformixDB”方言已被删除;代码现在可以作为bitback上的单独存储库使用。自从首次添加InformixDB方言以来,ibm-db项目已经提供了生产级Informix支持。

  • [bug] [declarative]

    当字符串参数发送到 relationship() 它无法解析为类或映射器,但已更正为与接收非字符串参数时的工作方式相同,这表示存在配置错误的关系的名称。

    This change is also backported to: 0.8.5

    References: #2888

  • [bug] [ext]

    修复了阻止 serializer 扩展名,用于正确处理包含非ASCII字符的表名或列名。

    This change is also backported to: 0.8.4

    References: #2869

  • [bug] [examples]

    修复了阻止历史元方法与多个层次的联合继承方案一起工作的错误。

0.9.0b1

Released: October 26, 2013

general

  • [general] [feature] [py3k]

    C扩展被移植到python 3,并将在任何受支持的c python 2或3环境下构建。

    References: #2161

  • [general] [feature] [py3k]

    现在Python2和3的代码库已经“就位”,不再需要运行2to 3。现在,向前兼容python 2.6。

    References: #2671

  • [general]

    对包的大规模重构重组了许多核心模块的导入结构以及ORM模块的某些方面。特别地 sqlalchemy.sql 已经被分解成比以前更多的模块,因此 sqlalchemy.sql.expression 现在减少了。这项工作的重点是大幅减少进口周期。此外,API系统在 sqlalchemy.sql.expressionsqlalchemy.orm 已重新组织,以消除函数与其生成的对象之间的文档冗余。

orm

  • [orm] [feature]

    向添加了新选项 relationship() distinct_target_key . 这使子查询预加载程序策略能够对最里面的select子查询应用一个distinct,以帮助对应于此关系的最里面的查询生成重复行(但是,当在最里面的子查询产生重复)。当标志设置为 True ,distinct将无条件呈现,并且当其设置为 None 如果最内部的关系目标列不包含完整的主键,则将呈现distinct。选项在0.8中默认为“假”(例如,在所有情况下默认为“关”),在0.9中默认为“无”(例如,默认为“自动”)。感谢亚历山大科瓦尔的帮助。

    This change is also backported to: 0.8.3

    References: #2836

  • [orm] [feature]

    关联代理现在返回 None 从标量关系中提取标量属性时,其中标量关系本身指向 None ,而不是提高 AttributeError .

    References: #2810

  • [orm] [feature]

    添加了新方法 AttributeState.load_history() 作品像 AttributeState.history 但也会激发加载器可调用文件。

    References: #2787

  • [orm] [feature]

    添加了新的加载选项 orm.load_only() . 这允许将一系列列名指定为仅加载这些属性,从而推迟其余属性。

    References: #1418

  • [orm] [feature]

    装载机选项系统已经完全重组,以建立一个更全面的基础,即 Load 对象。这个基础允许像 joinedload()defer() 等,用于“链接”样式,以指定路径下的选项,例如 joinedload("foo").subqueryload("bar") . 新系统取代了点分隔路径名、选项中的多个属性以及 _all() 选项。

    References: #1418

  • [orm] [feature]

    这个 composite() 构造现在在面向列的情况下维护返回对象 Query 而不是展开为单独的列。这利用了新的 Bundle 内部特征。此行为向后不兼容;要从将展开的复合列中选择,请使用 MyClass.some_composite.clauses .

    References: #2824

  • [orm] [feature]

    一种新的构造 Bundle 它允许将列表达式组的规范添加到 Query 构建。默认情况下,列组作为单个元组返回。行为 Bundle 但是,可以重写以向返回的行提供任何类型的结果处理。行为 Bundle 也嵌入到复合属性中 Query .

    References: #2824

  • [orm] [feature]

    这个 version_id_generator 参数 Mapper 现在可以指定依赖服务器生成的版本标识符,使用触发器或其他数据库提供的版本控制功能,或通过可选的编程值,通过设置 version_id_generator=False . 当使用服务器生成的版本标识符时,ORM将使用返回(如果可用)立即加载新版本值,否则将发出第二个选择。

    References: #2793

  • [orm] [feature]

    这个 eager_defaultsMapper 现在将允许使用内联返回子句(而不是第二条select语句)为支持返回的后端提取新生成的默认值。

    References: #2793

  • [orm] [feature]

    添加了新属性 Session.infoSession ;这是一个字典,应用程序可以在其中存储本地的任意数据 Session . 内容 Session.info 也可以使用初始化 info 的参数 Sessionsessionmaker .

  • [orm] [feature]

    现在实现了对事件侦听器的删除。该功能通过 event.remove() 功能。

    References: #2268

  • [orm] [feature]

    属性事件通过的机制 AttributeImpl 因为“启动器”令牌已更改;该对象现在是一个事件特定的对象,称为 attributes.Event . 此外,属性系统不再基于匹配的“initiator”标记停止事件;此逻辑已被移动到特定于ORM backref事件处理程序的逻辑中,后者是属性事件重新传播到后续的append/set/remove操作的典型源。如果方案不使用backref处理程序,则模拟backrefs行为的最终用户代码现在必须确保停止递归事件传播方案。使用这个新系统,当一个对象附加到一个集合,与一个新的多对一关联,与前一个多对一不关联,然后从前一个集合中删除时,backref处理程序现在可以执行“两跳”操作。在此更改之前,不会发生从上一个集合中删除的最后一步。

    References: #2789

  • [orm] [feature]

    有关ORM如何构造连接的主要更改,其中右侧本身是连接或左侧外部连接。ORM现在配置为允许简单嵌套表单的联接。 a JOIN (b JOIN c ON b.id=c.id) ON a.id=b.id 而不是强迫右侧 SELECT 子查询。这应该允许在大多数后端(尤其是mysql)上显著提高性能。一个多年来一直阻止这种变化的数据库后端,sqlite,现在通过移动 SELECT 从ORM到SQL编译器的子查询;这样,SQLite上的右嵌套联接最终仍将使用 SELECT ,而所有其他后端不再受此工作区的影响。

    作为这一变化的一部分,一个新的论点 flat=True 已添加到 orm.aliased()Join.alias()orm.with_polymorphic() 函数,它允许生成一个联接的“别名”,该别名将匿名别名应用于联接中的每个组件表,而不是生成一个子查询。

    References: #2587

  • [orm] [bug]

    修复了使用注释(如 remote()foreign() 在一 Column 与父级关联之前 Table 由于批注执行的固有复制操作,可能会产生与未在联接中呈现的父表相关的问题。

    This change is also backported to: 0.8.3

    References: #2813

  • [orm] [bug]

    固定错误在哪里 Query.exists() 没有任何Where条件,无法正常工作。致谢弗拉基米尔·马加梅多夫。

    This change is also backported to: 0.8.3

    References: #2818

  • [orm] [bug]

    修复了ORM用于迭代映射器层次结构的有序序列实现中的一个潜在问题;在Jython解释器下,即使cpython和pypy保持了顺序,也没有对该实现进行排序。

    This change is also backported to: 0.8.3

    References: #2794

  • [orm] [bug]

    修正了ORM级事件注册中的错误,“raw”或“propagate”标志可能在某些“未映射的基类”配置中被错误配置。

    This change is also backported to: 0.8.3

    References: #2786

  • [orm] [bug]

    与使用 defer() 加载映射实体时的选项。在加载时将每个对象延迟可调用应用于实例的函数开销明显高于从行加载数据的函数开销(请注意 defer() 是为了减少数据库/网络开销,不一定是函数调用计数);函数调用开销现在小于从列中加载数据的开销。每次加载创建的“lazy callable”对象的数量也从n(结果中的总延迟值)减少到1(延迟列的总数)。

    This change is also backported to: 0.8.3

    References: #2778

  • [orm] [bug]

    修正了当我们使用 make_transient() 函数,用于涉及基于集合的backrefs的操作。

    This change is also backported to: 0.8.3

    References: #2773

  • [orm] [bug]

    当试图刷新继承类的对象时,会发出警告,其中多态鉴别器已分配给对该类无效的值。

    This change is also backported to: 0.8.2

    References: #2750

  • [orm] [bug]

    修复了多态SQL生成中的错误,即如果连接字符串长度超过两个实体,那么针对相同基类的多个连接继承实体也会彼此连接,从而不会独立地跟踪基表上的列。

    This change is also backported to: 0.8.2

    References: #2759

  • [orm] [bug]

    修正了将复合属性发送到 Query.order_by() 将生成一些数据库不接受的带括号表达式。

    This change is also backported to: 0.8.2

    References: #2754

  • [orm] [bug]

    修复了复合属性和 aliased() 功能。以前,当应用别名时,复合属性在比较操作中无法正常工作。

    This change is also backported to: 0.8.2

    References: #2755

  • [orm] [bug] [ext]

    固定错误在哪里 MutableDict 在以下情况下没有报告更改事件 clear() 被叫来。

    This change is also backported to: 0.8.2

    References: #2730

  • [orm] [bug]

    修复了List Instrumentation无法表示 [0:0] 正确,尤其是在使用时 insert(0, item) 关联代理。由于python集合中的一些奇怪之处,这个问题更可能出现在python 3而不是2中。

    This change is also backported to: 0.8.3, 0.7.11

    References: #2807

  • [orm] [bug]

    attributes.get_history() 当与标量列映射属性一起使用时,现在将使用传递给它的“被动”标志;因为这默认为 PASSIVE_OFF ,如果该值不存在,则函数将默认查询数据库。这是相对于0.8的行为变化。

    References: #2787

  • [orm] [bug] [associationproxy]

    为=,!添加了附加条件!=与标量值一起使用的比较器,用于与无进行比较,除关联记录上的标量端点为空的现有测试外,还应考虑到关联记录本身不存在。以前,比较 Cls.scalar == None 将返回以下记录: Cls.associated 当时在场 Cls.associated.scalar 不是,但不是行 Cls.associated 不存在。更重要的是,逆运算 Cls.scalar != None 返回 Cls 其中的行 Cls.associated 不存在。

    案例 Cls.scalar != 'somevalue' 也被修改为更像直接的SQL比较;仅限于 Cls.associated 存在和 Associated.scalar 非空且不等于 'somevalue' 返回。以前,这是一个简单的 NOT EXISTS .

    还添加了一个特殊的用例,您可以在其中调用 Cls.scalar.has() 没有参数,当 Cls.scalar 是基于列的值-这将返回 Cls.associated 是否存在任何行,无论是否存在 Cls.associated.scalar 是否为空。

    References: #2751

  • [orm] [bug]

    修正了一个模糊的错误,即当跨多对多关系联接/联接加载到继承具有特定鉴别器值的子类的单个表时,由于将返回“次要”行,将获取错误的结果。对于多对多关系上的所有ORM联接,“辅助”表和右侧表现在都在圆括号内进行了内部联接,这样就可以准确地筛选左侧联接和右侧联接。这一变化是通过使用在中概述的右嵌套联接来解决问题而实现的。 #2587 .

    References: #2369

  • [orm] [bug]

    的“自动混叠”行为 Query.select_from() 方法已关闭。现在可以通过一种新方法获得特定的行为。 Query.select_entity_from() . 这里的自动混叠行为从来没有被很好地记录下来,而且通常不是所期望的,因为 Query.select_from() 更倾向于控制如何呈现联接。 Query.select_entity_from() 也将在0.8中提供,以便依赖自动混叠的应用程序可以移动其应用程序以使用此方法。

    References: #2736

orm declarative

  • [feature] [declarative] [orm]

    添加了一个便利类装饰器 as_declarative() ,是的包装 declarative_base() 它允许使用漂亮的类修饰方法应用现有的基类。

    This change is also backported to: 0.8.3

  • [feature] [declarative] [orm]

    ORM描述符(如混合属性)现在可以在与一起使用的字符串参数中由名称引用 order_byprimaryjoin ,或类似于 relationship() ,除了列绑定属性。

    This change is also backported to: 0.8.2

    References: #2761

engine

  • [engine] [feature]

    repr() 对于 URL 一个 Engine 现在将使用星号隐藏密码。由Gunnlaugur_r Briem提供。

    This change is also backported to: 0.8.3

    References: #2821

  • [engine] [feature]

    添加到的新事件 ConnectionEvents

    References: #2770

  • [engine] [bug] [oracle]

    如果 Engine 由于断开连接错误,已重新创建。这修复了Oracle8方言中的一个特定问题,但一般来说,dialect.initialize()阶段对于每个方言只应为一次。

    This change is also backported to: 0.8.3

    References: #2776

  • [engine] [bug] [pool]

    固定错误在哪里 QueuePool 如果现有池连接在失效或回收事件后重新连接失败,将丢失正确的签出计数。

    This change is also backported to: 0.8.3

    References: #2772

  • [engine] [bug]

    修正了错误 reset_on_return 变元 Pool 重新生成池时不会传播实现。礼貌礼节。

    This change is also backported to: 0.8.2

  • [engine] [bug]

    使用的regexp make_url() 函数现在解析ipv6地址,例如用括号括起来。

    This change is also backported to: 0.8.3, 0.7.11

    References: #2851

  • [engine] [bug]

    方法签名 Dialect.reflecttable() ,在所有已知情况下由 DefaultDialect ,已收紧至预期 include_columnsexclude_columns 没有任何kw选项的参数,减少模糊性-以前 exclude_columns 失踪了。

    References: #2748

sql

  • [sql] [feature]

    增加了对“唯一约束”反射的支持,通过 Inspector.get_unique_constraints() 方法。多谢罗马波多利卡的帮助。

    This change is also backported to: 0.8.4

    References: #1443

  • [sql] [feature]

    这个 update()insert()delete() 构造现在将把ORM实体解释为要操作的目标表,例如:

    from sqlalchemy import insert, update, delete
    
    ins = insert(SomeMappedClass).values(x=5)
    
    del_ = delete(SomeMappedClass).where(SomeMappedClass.id == 5)
    
    upd = update(SomeMappedClass).where(SomeMappedClass.id == 5).values(name='ed')

    This change is also backported to: 0.8.3

  • [sql] [feature] [mysql] [postgresql]

    PostgreSQL和MySQL方言现在支持对外键选项的反射/检查,包括更新时、删除时。PostgreSQL还反映了匹配、可延迟和初始。礼貌用语。

    References: #2183

  • [sql] [feature]

    A bindparam() 当在类型表达式中使用时,将复制具有“null”类型(例如未指定类型)的构造,并将新副本指定为比较列的实际类型。以前,这个逻辑会发生在给定的 bindparam() 就位。此外,类似的过程现在也发生在 bindparam() 传递到的构造 ValuesBase.values() 对于一个 InsertUpdate 在构造的编译阶段构造。

    这些都是细微的行为变化,可能会影响某些用法。

    References: #2850

  • [sql] [feature]

    对特殊符号(尤其是连词)的表达式处理进行了全面的修改。 None expression.null() expression.true() expression.false(), including consistency in rendering NULL in conjunctions, "short-circuiting" of and_() and or_() expressions which contain boolean constants, and rendering of boolean constants and expressions as compared to "1" or "0" for backends that don't feature true/false 常量。

    References: #2734, #2804, #2823

  • [sql] [feature]

    类型系统现在处理呈现“literal bind”值的任务,例如,通常是绑定参数但由于上下文的原因,这些值必须呈现为字符串,通常在DDL构造(如检查约束和索引)中呈现(请注意,“literal bind”值自开始由DDL使用 #2742 )一种新方法 TypeEngine.literal_processor() 作为基础,以及 TypeDecorator.process_literal_param() 添加以允许包装本机文本呈现方法。

    References: #2838

  • [sql] [feature]

    这个 Table.tometadata() 方法现在生成所有 SchemaItem.info 所有词典 SchemaItem 结构中的对象,包括列、约束、外键等。由于这些字典是副本,因此它们独立于原始字典。以前,只有 .info 词典 Column 已在此操作中传输,并且它仅在适当位置链接,而不是复制。

    References: #2716

  • [sql] [feature]

    这个 default 的参数 Column 现在接受一个类或对象方法作为参数,除了一个独立的函数;将正确地检测“context”参数是否被接受。

  • [sql] [feature]

    向添加了新方法 insert() 构造 Insert.from_select() . 给定列列表和可选择的渲染 INSERT INTO (table) (columns) SELECT .. . 虽然此功能作为0.9的一部分突出显示,但它也被反向移植到0.8.3。

    References: #722

  • [sql] [feature]

    为提供了新属性 TypeDecorator 调用 TypeDecorator.coerce_to_is_types ,以便使用 ==!=None 布尔类型产生一个 IS 表达式,或带有绑定参数的纯等同性表达式。

    References: #2734, #2744

  • [sql] [feature]

    A label() 构造现在将在 ORDER BY 子句,如果该标签也在select的columns子句中引用,而不是重写完整表达式。这为数据库在两种不同的上下文中优化同一表达式的计算提供了更好的机会。

    References: #1068

  • [sql] [bug]

    固定错误在哪里 type_coerce() 不能用 __clause_element__() 方法正确。

    This change is also backported to: 0.8.3

    References: #2849

  • [sql] [bug]

    这个 EnumBoolean 当为“非本机”类型生成检查约束时,类型现在绕过任何正在使用的自定义(例如,typecorator)类型。这样自定义类型就不会参与检查中的表达式,因为该表达式是针对“impl”值的,而不是针对“decorated”值的。

    This change is also backported to: 0.8.3

    References: #2842

  • [sql] [bug]

    这个 .unique 旗上 Index 可以制作为 None 如果它是由 Column 没有具体说明 unique (默认为 None )现在旗子将永远是 TrueFalse .

    This change is also backported to: 0.8.3

    References: #2825

  • [sql] [bug]

    修复了默认编译器加上PostgreSQL、MySQL和MSSQL的错误,以确保在create index语句中直接将任何文本SQL表达式值呈现为文本,而不是绑定参数。这还会更改其他DDL(如约束)的呈现方案。

    This change is also backported to: 0.8.3

    References: #2742

  • [sql] [bug]

    A select() 在FROM子句中引用自身,通常是通过就地突变,这将引发一条信息性错误消息,而不是导致递归溢出。

    This change is also backported to: 0.8.3

    References: #2815

  • [sql] [bug]

    修复了使用 column_reflect 要更改的事件 .key 进来的 Column 将阻止主键约束、索引和外键约束被正确反映。

    This change is also backported to: 0.8.3

    References: #2811

  • [sql] [bug]

    这个 ColumnOperators.notin_() 当对空集合使用时,0.8中添加的运算符现在正确地生成表达式“in”的负数。

    This change is also backported to: 0.8.3

  • [sql] [bug] [postgresql]

    修复了表达式系统依赖于 str() 指某些表达式的形式 .c 集合上的 select() 构造,但是 str() 表单不可用,因为元素依赖于特定于方言的编译构造,特别是 __getitem__() 与PostgreSQL一起使用的运算符 ARRAY 元素。修复程序还添加了一个新的异常类 UnsupportedCompilationError 当编译器被要求编译一些它不知道如何编译的东西时,就会出现这种情况。

    This change is also backported to: 0.8.3

    References: #2780

  • [sql] [bug]

    对关联行为的多个修复 Select 构造,在0.8.0中首次引入:

    • 为了满足这样一个用例:从条目向外关联到一个包含另一个的select,然后再包含这个select,当通过 Select.correlate() ,前提是目标select位于where/order by/columns子句所包含的链的某个位置,而不仅仅是嵌套的from子句。这使得 Select.correlate() 在保持新的“智能”相关性的同时,可以更兼容0.7。

    • 当不使用显式关联时,通常的“隐式”关联将其行为限制为仅立即封闭选择,以最大限度地与0.7应用程序兼容,并在这种情况下防止跨嵌套From的关联,从而保持与0.8.0/0.8.1的兼容性。

    • 这个 Select.correlate_except() 方法并没有阻止给定的FROM子句在所有情况下的相关性,也会导致FROM子句被错误地完全忽略(更像0.7所做的那样),这已经得到了修复。

    • 调用 select.correlate_except(None) 将按预期将所有FROM子句输入相关性。

    This change is also backported to: 0.8.2

    References: #2668, #2746

  • [sql] [bug]

    修正了将带有多个外键路径的表“a”的select()连接到表“b”和该表“b”时,如果将表“a”直接连接到“b”,将无法生成“含糊不清的连接条件”错误报告的错误;相反,它将生成具有多个条件的连接条件。

    This change is also backported to: 0.8.2

    References: #2738

  • [sql] [bug] [reflection]

    修正了使用 MetaData.reflect() 在两个模式都有相同名称的表的情况下,跨远程模式和本地模式都可能产生错误的结果。

    This change is also backported to: 0.8.2

    References: #2728

  • [sql] [bug]

    删除了“未实现” __iter__() 从基地调用 ColumnOperators 类,虽然它是在0.8.0中引入的,以防止在实现 __getitem__() 方法,然后错误地调用 list() 在该对象上,它的作用是使列元素报告它们实际上是可iterable类型,然后在尝试迭代时引发错误。这里没有真正的方法可以同时拥有双方,所以我们坚持使用Python最佳实践。小心实施 __getitem__() 在您的自定义操作符上!

    This change is also backported to: 0.8.2

    References: #2726

  • [sql] [bug]

    固定回归可追溯到0.7.9,如果在多个FROM条款中提及CTE的名称,则可能无法正确引用该名称。

    This change is also backported to: 0.8.3, 0.7.11

    References: #2801

  • [sql] [bug] [cte]

    修复了公用表表达式系统中的错误,其中如果CTE仅用作 alias() 构造,它不会使用WITH关键字呈现。

    This change is also backported to: 0.8.3, 0.7.11

    References: #2783

  • [sql] [bug]

    固定错误 CheckConstraint DDL,其中“Quote”标志来自 Column 不会传播对象。

    This change is also backported to: 0.8.3, 0.7.11

    References: #2784

  • [sql] [bug]

    “name”属性设置为 Index 在调用“attach”事件之前,可以使用attachment事件根据父表和/或列动态生成索引的名称。

    References: #2835

  • [sql] [bug]

    错误的kw参数“schema”已从 ForeignKey 对象。这是一个意外的提交,没有执行任何操作;使用此kw arg时,在0.8.3中会发出警告。

    References: #2831

  • [sql] [bug]

    对处理“引用的”标识符的方式的一种重做,即不依赖于 quote=True 传递标志时,这些标志将转换为富字符串对象,并在传递到常见模式构造(如 TableColumn 这样就解决了各种方法不能正确地使用“引号”标志的问题,例如 Engine.has_table() 以及相关方法。这个 quoted_name 对象是一个字符串子类,如果需要,也可以显式使用;该对象将保留传递的引用首选项,并将绕过标准化大写符号(如Oracle、Firebird和DB2)的方言执行的“名称规范化”。其结果是“大写”后端现在可以使用强制引用的名称,例如小写引用的名称和新的保留字。

    References: #2812

  • [sql] [bug]

    决议 ForeignKey 目标对象 Column 根据目标 Column 与相同的 MetaData 这样 ForeignKey 而不是等待第一次构造联接或类似联接。这与其他改进一起允许更早地检测一些外键配置问题。这里还包括对类型传播系统的重做,因此现在将类型设置为 None 在任何 Column 指的是另一个途径 ForeignKey -一旦与另一列关联,类型将从目标列中复制,现在也适用于复合外键。

    References: #1765

postgresql

  • [postgresql] [feature]

    增加了对PostgreSQL 9.2范围类型的支持。目前,没有提供类型转换,因此目前直接使用字符串或psycopg2 2.5范围扩展类型。补丁提供克里斯威瑟斯。

    This change is also backported to: 0.8.2

  • [postgresql] [feature]

    在使用psycopg2 dbapi时,增加了对“自动提交”隔离的支持。关键字可通过 isolation_level 执行选项。补片由罗马人Podolyaka提供。

    This change is also backported to: 0.8.2

    References: #2072

  • [postgresql] [feature]

    添加了对渲染的支持 SMALLSERIAL 当A SmallInteger 基于PostgreSQL 9.2或更高版本的服务器版本检测,类型用于主键自动增量列。

    References: #2840

  • [postgresql] [bug]

    从服务器默认列的反射中删除了128个字符的截断;此代码是PG系统视图的原始代码,PG系统视图截断了字符串的可读性。

    This change is also backported to: 0.8.3

    References: #2844

  • [postgresql] [bug]

    括号将应用于在create index语句的列列表中呈现的复合SQL表达式。

    This change is also backported to: 0.8.3

    References: #2742

  • [postgresql] [bug]

    修复了postgresql版本字符串的前缀在单词“postgresql”或“enterprisedb”之前无法解析的错误。由Scott Schaefer提供。

    This change is also backported to: 0.8.3

    References: #2819

  • [postgresql] [bug]

    行为 extract() 已经简化了PostgreSQL方言,不再注入硬编码 ::timestamp 或者在给定表达式中进行类似的强制转换,因为这会干扰诸如时区感知日期时间之类的类型,但对于现代版本的psycopg2来说,似乎也完全没有必要。

    This change is also backported to: 0.8.2

    References: #2740

  • [postgresql] [bug]

    修复了hstore类型中包含反斜杠引号的键/值在使用“非本机”(即非psycopg2)方法转换hstore数据时无法正确转义的错误。由Ryan Kelly提供补丁。

    This change is also backported to: 0.8.2

    References: #2766

  • [postgresql] [bug]

    修复了多列PostgreSQL索引中列的顺序会以错误的顺序反映的错误。由罗马波多利卡提供。

    This change is also backported to: 0.8.2

    References: #2767

mysql

  • [mysql] [feature]

    这个 mysql_length 与一起使用的参数 Index 现在可以作为列名称/长度的字典传递,用于组合索引。多亏了罗马波多利卡。

    This change is also backported to: 0.8.2

    References: #2704

  • [mysql] [feature]

    MySQL mysql.SET 类型现在的自动引用行为与 mysql.ENUM . 设置值时不需要引号,但存在的引号将与警告一起自动检测。这也有助于alembic,其中集合类型不使用引号呈现。

    References: #2817

  • [mysql] [bug]

    变化 #2721 ,这就是 deferrable 关键字 ForeignKeyConstraint 在MySQL后端被静默忽略,将从0.9恢复;此关键字现在将再次呈现,并在不理解的情况下引发MySQL错误-同样的行为也将应用于 initially 关键字。在0.8中,关键字将保持忽略状态,但会发出警告。另外, match 关键字现在引发 CompileError 在0.9上,并在0.8上发出警告;这个关键字不仅被MySQL自动忽略,而且会破坏on update/on delete选项。

    使用A ForeignKeyConstraint 如果在MySQL上呈现或呈现方式不同,请使用自定义编译选项。此用法的示例已添加到文档中,请参见 MySQL外键 .

    This change is also backported to: 0.8.3

    References: #2721, #2839

  • [mysql] [bug]

    mysql connector方言现在允许create_engine查询字符串中的选项覆盖在connect中设置的默认值,包括“buffered”和“raise_on_warnings”。

    This change is also backported to: 0.8.3

    References: #2515

  • [mysql] [bug]

    修复了使用多表更新时的错误,其中补充表是带有自己绑定参数的select,使用mysql的特殊语法时,绑定参数的位置将与语句本身相反。

    This change is also backported to: 0.8.2

    References: #2768

  • [mysql] [bug]

    向添加了另一个条件 mysql+gaerdbms 方言检测所谓的“发展”模式,在那里我们应该使用 rdbms_mysqldb 数据库接口。布雷特·斯莱特金提供贴片服务。

    This change is also backported to: 0.8.2

    References: #2715

  • [mysql] [bug]

    这个 deferrable 上的关键字参数 ForeignKeyForeignKeyConstraint 不会呈现 DEFERRABLE mysql方言的关键字。很长一段时间以来,我们一直保持这种状态,因为一个不可延迟的外键与一个可延迟的外键的作用会非常不同,但是有些环境只是在mysql上禁用fks,所以我们在这里不会那么固执己见。

    This change is also backported to: 0.8.2

    References: #2721

  • [mysql] [bug]

    5.5、5.6版MySQL保留字更新,由Hanno Schlichting提供。

    This change is also backported to: 0.8.3, 0.7.11

    References: #2791

  • [mysql] [bug]

    在反射中修复和测试MySQL外键选项的解析;这补充了 #2183 我们开始支持外键选项的反射,例如在更新/删除级联时。

    References: #2839

  • [mysql] [bug]

    改进了对cymysql驱动程序的支持,支持0.6.5版,由Hajime Nakagami提供。

sqlite

  • [sqlite] [bug]

    新添加的sqlite datetime参数storage_format和regexp显然没有完全正确实现;虽然接受了这些参数,但实际上它们不会有任何效果;这已经得到了修复。

    This change is also backported to: 0.8.3

    References: #2781

  • [sqlite] [bug]

    补充 sqlalchemy.types.BIGINT 到可以由sqlite方言反映的类型名列表;礼貌的Russell Stuart。

    This change is also backported to: 0.8.2

    References: #2764

mssql

  • [mssql] [bug]

    查询SQL Server 2000上的信息架构时,删除了在0.8.1中添加的强制转换调用,以帮助解决驱动程序问题,这显然与2000上的驱动程序不兼容。对于SQL Server 2005及更高版本,强制转换仍然有效。

    This change is also backported to: 0.8.2

    References: #2747

  • [mssql] [bug] [pyodbc]

    使用python 3+pyodbc修复了mssql,包括正确传递的语句。

    References: #2355

oracle

  • [oracle] [feature] [py3k]

    使用cx_Oracle进行的Oracle单元测试现在完全通过了python 3。

  • [oracle] [bug]

    修复了使用同义词的Oracle表反射在同义词和表位于不同远程架构中时失败的错误。补丁来修复礼节凯尔德尔。

    This change is also backported to: 0.8.3

    References: #2853

firebird

  • [firebird] [feature]

    增加新标志 retaining=True 到Kinterbasdb和fdb方言。它控制 retaining 标志发送到 commit()rollback() DBAPI连接的方法。由于历史原因,此标志默认为 True 在0.8.2中,但是在0.9.0b1中,此标志默认为 False .

    This change is also backported to: 0.8.2

    References: #2763

  • [firebird] [feature]

    这个 fdb 如果指定时没有方言限定符,则方言现在是默认方言。 firebird:// ,根据Firebird项目出版 fdb 作为他们的官方python驱动程序。

    References: #2504

  • [firebird] [bug]

    类型查找在反映Firebird类型long和int64时已被修复,因此long被视为整数,int64被视为bigint,除非类型具有“精度”,在这种情况下,它被视为数字。补丁由Russell Stuart提供。

    This change is also backported to: 0.8.2

    References: #2757

misc

  • [feature]

    添加了新标志 system=TrueColumn 将该列标记为“系统”列,数据库会自动显示该列(如PostgreSQL) oidxmin )该列将从 CREATE TABLE 语句,否则将可用于查询。此外, CreateColumn 构造可应用于允许跳过列的自定义编译规则,方法是生成返回 None .

    This change is also backported to: 0.8.3

  • [feature] [examples]

    改进了中的示例 examples/generic_associations 包括那个 discriminator_on_association.py 利用单表继承来完成“鉴别器”的工作。此外,还添加了一个真正的“通用外键”示例,该示例与其他流行的框架类似,因为它使用开放式整数指向任何其他表,而不是传统的引用完整性。虽然我们不推荐这种模式,但信息需要免费。

    This change is also backported to: 0.8.3

  • [feature] [core]

    向添加了新的变体 UpdateBase.returning() 调用 ValuesBase.return_defaults() ;这允许将任意列添加到语句的返回子句中,而不干扰编译器通常的“隐式返回”功能,该功能用于高效地获取新生成的主键值。为了支持后端,在 ResultProxy.returned_defaults .

    References: #2793

  • [feature] [pool]

    为“返回时回滚”和使用较少的“返回时提交”添加了池日志记录。这是通过池“调试”日志的其余部分启用的。

    References: #2752

  • [bug] [examples]

    在版本控制示例中创建的历史表中添加了“autoincrement=false”,因为在任何情况下,该表都不应该有autoinc,由patrick schmid提供。

    This change is also backported to: 0.8.3

  • [bug] [ext]

    修正了这样一个错误:如果用函数而不是类来设置复合类型,当它试图检查该列是否为 MutableComposite (事实并非如此)。由Asldevi提供。

    This change is also backported to: 0.8.2

  • [bug] [examples]

    修正了“版本控制”方法的一个问题,即当存在backrefs时,多对一引用可以为目标生成一个无意义的版本,即使它没有改变。Matt Chisholm提供补丁。

    This change is also backported to: 0.8.2

  • [requirements]

    Python mock 现在需要库才能运行单元测试套件。虽然作为标准库的一部分(从python 3.3开始),但以前的python安装将需要安装此库,以便运行单元测试或使用 sqlalchemy.testing 外部方言包。

    This change is also backported to: 0.8.2