Release: 1.4.25 | Release Date: September 22, 2021

SQLAlchemy 1.4 Documentation

0.6换热器

0.6.9

Released: Sat May 05 2012

general

  • [general]

    调整了内部用于解决导入周期的“importlater”机制,以便 __import__ 在导入sqlAlchemy或sqlAlchemy.orm时完成,从而避免使用 __import__ 应用程序启动新线程后,修复。

    References: #2279

orm

  • [orm] [bug]

    修复了query.get()中布尔上下文中用户映射对象的不当计算。

    References: #2310

  • [orm] [bug]

    修复了在无意中将元组传递给session.query()时引发的错误格式设置。

    References: #2297

  • [orm]

    修正了这样一个错误:如果与将多个实体组合在一起的列表达式相比,query.join()使用的源子句将不一致。

    References: #2197

  • [orm]

    修复了仅在python 3中明显的错误,如果持久对象主键不是单个整数,那么在刷新期间对持久+挂起对象进行排序将产生非法比较。

    References: #2228

  • [orm]

    修复了在子表上具有join条件的relationship()上将join.join()+aliased=true从已联接的inh结构转换为自身的错误,该错误会将lead实体不当地转换为已联接的实体。

    References: #2234

  • [orm]

    修正了这样一个错误,即mapper.order_by属性将在子查询的“内部”查询中被忽略。.

    References: #2287

  • [orm]

    修正了一个错误,如果映射的类重新定义为非标准的东西,这是一个支持的用例,因为sqla不应该参考这些,如果类是“复合”(即非单个实体)结果集的一部分,将参考这些方法。

    References: #2215

  • [orm]

    修复了导致SQL在以下情况下爆炸的细微错误:列属性()对子查询+joinedload+limit+按列属性()排序。.

    References: #2188

  • [orm]

    使用父级以及对父级使用“动态”关系时产生的联接条件将生成唯一的bindparams,而不是错误地重复相同的bindparam。.

    References: #2207

  • [orm]

    修复了查询中的“无语句条件”断言,如果在调用from_statement()之后调用了生成方法,则该断言将尝试引发。

    References: #2199

  • [orm]

    collate(“some collation”)现在可以工作了。

    References: #1776

examples

  • [examples]

    调整dictlike-polymorphic.py示例以应用cast,使其适用于pg和其他数据库。

    References: #2266

engine

  • [engine]

    对0.7.4中引入的修复进行了反向端口,这可以确保连接在尝试对保存点和两阶段事务调用rollback()/prepare()/release()之前处于有效状态。

    References: #2317

sql

  • [sql]

    修复了两个涉及可选列对应关系的细微错误,一个是重复具有相同标签的子查询,另一个是当标签被“分组”并丢失时。影响。

    References: #2188

  • [sql]

    修正了在某些方言中使用字符串类型时会设置“unicode警告”标志的错误。这个错误不在0.7中。

  • [sql]

    修正了一个错误,如果传递了一个可选择的,那么select的方法将失败。但是,这里的from行为仍然不正确,因此在任何情况下都需要0.7才能使用这个用例。

    References: #2270

schema

  • [schema]

    当foreignkeyconstraint引用父级中找不到的列名时,添加了一条信息性错误消息。

postgresql

  • [postgresql]

    修正了pg 9中修改后的索引行为影响重命名列上主键反射的错误。

    References: #2141, #2291

mysql

  • [mysql]

    修复了将ansi中性引号“'”用于xa命令而不是“'”的oursql方言。.

    References: #2186

  • [mysql]

    创建表会将collate选项放在charset之后,这似乎是MySQL关于它是否实际工作的任意规则的一部分。

    References: #2225

mssql

  • [mssql] [bug]

    检索索引名称列表和这些索引中的列名称时,解码传入值。

    References: #2269

oracle

  • [oracle]

    添加了ORA-00028以断开代码,请使用cx_oracle_error.code获取代码。

    References: #2200

  • [oracle]

    修复了未生成正确DDL的oracle.raw类型。

    References: #2220

  • [oracle]

    添加了当前保留字列表。

    References: #2212

0.6.8

Released: Sun Jun 05 2011

orm

  • [orm]

    对基于列的实体调用query.get()无效,此情况现在引发一个取消预测警告。

    References: #2144

  • [orm]

    非主映射器将继承主映射器的标识类。这样,针对通常在继承映射中的类建立的非主映射将产生与主映射器的标识映射兼容的结果。

    References: #2151

  • [orm]

    反向端口0.7的标识映射实现,它不在移除周围使用互斥体。尽管在0.6.7中进行了调整,但由于一些用户仍然出现死锁;不使用互斥体的0.7方法似乎不会产生“字典更改大小”问题,这是互斥体的原始原理。

    References: #2148

  • [orm]

    已修复为“无法对目标列“q”执行同步规则;映射器“x”未映射此列”发出的错误消息,以引用正确的映射器。.

    References: #2163

  • [orm]

    修正了“自引用”关系的确定会失败的错误,没有与自身相关联的inh子类的解决方法,或与在联接条件下子类中没有cols的子类相关联的inh子类的解决方法。

    References: #2149

  • [orm]

    在确定父类和子类之间的继承条件时,mapper()将忽略不相关表的未配置外键。这相当于已经应用于声明性的行为。注意,0.7有一个更全面的解决方案,改变join()本身决定FK错误的方式。

    References: #2153

  • [orm]

    修正了当使用日志记录时,映射器映射到匿名别名的错误,因为别名名中有未捕获的%登录。

    References: #2171

  • [orm]

    修改在刷新时未检测到“标识”键时出现的消息文本,以包括列未设置为正确检测自动增量的常见原因。

    References: #2170

  • [orm]

    修复了事务级别“已删除”集合无法清除清除清除状态的错误,如果这些状态后来成为暂时状态,则会引发错误。

    References: #2182

engine

  • [engine]

    已调整rowproxy结果行的uu contains_uu()方法,使内部不会生成异常引发;nosuchColumnError()也将生成其消息,无论是否可以将列构造强制为字符串。

    References: #2178

sql

  • [sql]

    修正了这样一个错误:如果将fetchedValue传递给列服务器update,它就不会分配其父“column”,从而增加了所有列默认分配模式的测试覆盖率。

    References: #2147

  • [sql]

    修复了将select()的标签与另一个标签嵌套在一起会产生不正确的导出列的错误。除其他外,这将破坏ORM列_property()对另一列_property()的映射。.

    References: #2167

postgresql

  • [postgresql]

    修正了影响pg 9的错误,如果对名称已更改的列进行索引反射,则会失败。.

    References: #2141

  • [postgresql]

    一些关于数字数组的单元测试修复,匹配操作符。修复了一个潜在的浮点不准确问题,目前对match运算符的某些测试仅在面向en的区域内执行。.

    References: #2175

mssql

  • [mssql]

    修复了MSSQL方言中的错误,即应用于模式限定表的别名将泄漏到封闭的select语句中。

    References: #2169

  • [mssql]

    修正了当在结果集或绑定参数中使用时,datetime2类型在“adapt”步骤上失败的错误。此问题不在0.7中。

    References: #2159

0.6.7

Released: Wed Apr 13 2011

orm

  • [orm]

    收紧了标识映射迭代周围的迭代与移除互斥,试图减少(极少数)可重入GC操作导致死锁的可能性。可能会在0.7中删除互斥体。

    References: #2087

  • [orm]

    增加了一个 name 参数 Query.subquery() ,以允许将固定名称分配给别名对象。

    References: #2030

  • [orm]

    当联接表继承映射器在本地映射表上没有主键(但在超类表上有PK)时,将发出警告。

    References: #2019

  • [orm]

    修复了这样一个错误:如果多态层次结构中的“中间”类不指定“多态”标识,那么它在刷新时将没有“多态”列,从而导致奇怪的错误,在从该目标查询时加载了错误的类。当使用单表继承时,也会发出正确的Where条件。

    References: #2038

  • [orm]

    修复了在包含属性或排除属性的映射中排除SQL或服务器端默认值的列将导致unmappedColumnError的错误。

    References: #1995

  • [orm]

    在异常情况下,会发出警告:集合上的追加或类似事件在父对象被取消引用后发生,这会防止父对象在会话中被标记为“脏”。这在0.7中是一个例外。

    References: #2046

  • [orm]

    修正了query.options()中的错误,即使用字符串键应用于Lazyload的路径可能会在错误的实体上重叠相同的命名属性。注0.7包含此修复程序的更新版本。

    References: #2098

  • [orm]

    重写了尝试对父类型不具有多态性的子类进行刷新时引发的异常。

    References: #2063

  • [orm]

    对backrefs的状态处理进行了一些修复,通常在autoflush=false时,其中back-referenced集合无法在不进行净更改的情况下正确处理添加/删除。感谢Richard Murri的测试用例+补丁。

    References: #2123

  • [orm]

    如果使用了from_self(),则“having”子句将从内部复制到外部查询。

    References: #2130

examples

  • [examples]

    烧杯缓存示例允许对query_callable()函数使用“query_cls”参数。

    References: #2090

engine

  • [engine]

    修复了queuepool、singletonthreadpool中的错误,其中通过溢出或定期清理()丢弃的连接未显式关闭,而是将垃圾收集留给任务。这通常只影响非引用计数后端,如Jython和Pypy。感谢Jaimy Azle发现了这一点。

    References: #2102

sql

  • [sql]

    column.copy()与table.tometadata()中使用的一样,复制'doc'属性。

    References: #2028

  • [sql]

    在resultproxy.c扩展中添加了一些def,以便扩展在python 2.4上编译和运行。

    References: #2023

  • [sql]

    编译器扩展现在支持重写表达式的默认编译。_bindparamClause包括在insert()/update()语句的values/set子句中自动生成的绑定也将使用新的编译规则。

    References: #2042

  • [sql]

    为resultProxy“返回_行”、“is插入”添加了访问器

    References: #2089

  • [sql]

    选择()的limit/offset关键字以及传递给select.limit()/offset()的值将强制为整数。

    References: #2116

postgresql

  • [postgresql]

    当显式序列执行派生出串行列的自动生成序列的名称时,该名称当前仅在隐式返回=false时出现,如果使用相同的逻辑postgresql,table+column name大于63个字符,则该名称现在适用。

    References: #1083

  • [postgresql]

    向“disconnect”异常列表中添加了一条附加的libpq消息,“无法从服务器接收数据”

    References: #2044

  • [postgresql]

    为PostgreSQL方言添加了保留单词。

    References: #2092

  • [postgresql]

    修正了位类型以允许“长度”参数,“变化”参数。反射也是固定的。

    References: #2073

mysql

  • [mysql]

    我们的SQL方言接受create_engine()中与mysqldb相同的“ssl”参数。

    References: #2047

sqlite

  • [sqlite]

    修复了将外键反射创建为“references<tablename>”而没有col name的错误。

    References: #2115

mssql

  • [mssql]

    重写用于获取视图定义的查询(通常在使用Inspector接口时),以使用sys.sql_模块而不是信息架构,从而允许完全返回长度超过4000个字符的视图定义。

    References: #2071

oracle

  • [oracle]

    使用需要对列本身或名称生成的绑定参数使用引号的列名,例如具有特殊字符、下划线、非ASCII字符的名称,现在可以在与cx_Oracle交谈时正确地转换绑定参数键。

    References: #2100

  • [oracle]

    Oracle方言添加了use_binds_for_limits=false create_engine()标志,将以内联方式呈现限制/偏移值,而不是以绑定的形式呈现,以修改Oracle使用的执行计划。

    References: #2116

firebird

  • [firebird]

    如果设置为false,则create_engine()上的“implicit_returning”标志将得到处理。

    References: #2083

misc

  • [informix]

    添加了保留字informix方言。

    References: #2092

  • [ext]

    水平“shard shardession”类接受公共会话参数“query”cls作为构造函数参数,以便进一步对shardession进行子类化。

    References: #2090

  • [declarative]

    添加了对名称“metadata”用于声明性类的列属性的情况的显式检查。

    References: #2050

  • [declarative]

    修复引用旧@classproperty name到引用@declaredattr的错误消息

    References: #2061

  • [declarative]

    论点 __mapper_args__ 这不是“hashable”,也不会被误认为是始终可以hashable的,可能是列参数。

    References: #2091

  • [documentation]

    记录的sqlite日期/时间/日期时间类型。

    References: #2029

0.6.6

Released: Sat Jan 08 2011

orm

  • [orm]

    修正了一个错误,即在一个干净的对象上发生了一个“不可变”的属性修改事件,除了前面的可变属性更改之外,该事件将无法在标识映射中强引用自身。这将导致对象被垃圾收集,丢失以前未保存在“可变更改”字典中的任何更改的跟踪。

  • [orm]

    修正了“被动删除='all'”在刷新过程中没有将正确的符号传递给惰性加载程序,从而导致无根据的加载的错误。

    References: #2013

  • [orm]

    修复了阻止在映射的select语句上使用复合映射属性的错误。注:复合材料的加工预计在0.7内发生显著变化。

    References: #1997

  • [orm]

    active_history标志也添加到composite()中。该标志在0.6中不起作用,而是作为向前兼容的占位符标志,因为它在0.7中适用于复合材料。

    References: #1976

  • [orm]

    修复了UOW错误,即在删除对象时,传递给session.delete()的过期对象不会卸载引用或集合,尽管被动删除仍保留默认值false。

    References: #2002

  • [orm]

    如果继承的映射器已经具有版本“id”列,则在继承的映射器上指定版本“col”时,如果这些列表达式不同,则会发出警告。

    References: #1987

  • [orm]

    如果该链中的前一个联接是外部联接,则“innerjoin”标志不会沿joinedLoad()联接链生效,从而允许在结果中正确返回没有引用子行的主行。

    References: #1954

  • [orm]

    修正了“subqueryload”策略的错误,即如果实体是一个别名()构造,策略将失败。

    References: #1964

  • [orm]

    修复了有关“subqueryload”策略的错误,即如果使用来自a->joined子类->c的表单的多级加载,则联接将失败。

    References: #2014

  • [orm]

    修复了-1对查询对象的索引。它被错误地转换为空切片-1:0,从而导致索引错误。

    References: #1968

  • [orm]

    映射器参数“primary_key”可以作为单个列以及列表或元组传递。将其描述为标量值的文档示例已更改为列表。

    References: #1971

  • [orm]

    在relationship()和column_property()中添加了active_history标志,强制属性事件始终加载“old”值,以便它对attribute s.get_history()可用。

    References: #1961

  • [orm]

    如果复合键中的参数太大或太小,则query.get()将提高。

    References: #1977

  • [orm]

    从0.7开始的“optimized get”修复的backport,改进了联合继承“load expired row”行为的生成。

    References: #1992

  • [orm]

    对于“primaryjoin”错误,在一个特殊的条件下,join条件“只对viewonly有效,但不对非viewonly有效,并且没有使用foreign-keys的情况下,可以使用更多的措辞-在建议中添加“foreign-keys”。另外,在一般“方向”错误的建议中添加“外键”。

examples

  • [examples]

    版本控制示例现在支持检测关联关系()中的更改。

engine

  • [engine]

    只有在显式使用unicode类型时才会引发针对非unicode绑定数据的“unicode警告”;在引擎或字符串类型上使用convert_unicode=true时则不会引发。

  • [engine]

    修正了C版十进制结果处理器内存泄漏的问题。

    References: #1978

  • [engine]

    实现了rowproxy的C版本的序列检查功能,以及rowproxy的2.7样式的“collections.sequence”注册。

    References: #1871

  • [engine]

    如果没有正在进行的事务,则线程本地引擎方法rollback()、commit()、prepare()不会引发;这是0.6中引入的回归。

    References: #1998

  • [engine]

    threadlocal引擎在begin()时返回自身,begin_nested();引擎然后实现ContextManager方法以允许“with”语句。

    References: #2004

sql

  • [sql]

    单个非关联运算符的多个链的固定运算符优先规则。即“x-(y-z)”将编译为“x-(y-z)”,而不是“x-y-z”。也适用于标签,即“x-(y-z).label('foo')”

    References: #1984

  • [sql]

    column.copy()中复制了column的“info”属性,也就是说,在声明性混合中使用columns时会发生这种情况。

    References: #1967

  • [sql]

    为强制为int的布尔值添加了绑定处理器,为dbapis(如pymsql)添加了绑定处理器,后者天真地对值调用str()。

  • [sql]

    checkConstraint将在copy()/tometata()中复制其“初始”、“可延迟”和“创建规则”属性。

    References: #2000

postgresql

  • [postgresql]

    in子句中的单元素元组表达式也正确地用括号括起来,也可以从

    References: #1984

  • [postgresql]

    确保psycopg2和pg8000的“numeric”基类型识别每个numeric、float、int code、scalar+数组。

    References: #1955

  • [postgresql]

    作为uuid=true标志添加到uuid类型,将以python uuid()对象而不是字符串的形式接收和返回值。目前,uuid类型只能用于psycopg2。

    References: #1956

  • [postgresql]

    修复了在发生池释放+重新创建之后,在不支持枚举的pg版本中出现keyerror的错误。

    References: #1989

mysql

  • [mysql]

    修正了jython+zxjdbc的错误处理,使得_Table()属性再次起作用。从0.6.3回归(我们没有JythonBuildBot,抱歉)

    References: #1960

sqlite

  • [sqlite]

    创建表中的references子句包含到另一个具有相同架构名称的表的远程架构,现在按照sqlite的要求呈现不带schema子句的远程名称。

    References: #1851

  • [sqlite]

    在同一主题上,创建表中的references子句包含到 不同的 架构而不是父表的架构根本不呈现,因为交叉架构引用似乎不受支持。

mssql

  • [mssql]

    不幸的是,中的索引反射重写未正确测试,返回的结果不正确。这种回归现在是固定的。

    References: #1770

oracle

  • [oracle]

    cx-oracle“十进制检测”逻辑发生在具有不明确数字特征的结果集列上,现在使用由locale/nls-lang设置确定的小数点字符,使用该字符的第一次连接检测。使用非周期小数点nls_lang设置时,还需要使用cx_Oracle 5.0.3或更高版本。

    References: #1953

firebird

  • [firebird]

    FireBird数字类型现在显式检查十进制,让float()直接传递,从而允许特殊值,如float(“inf”)。

    References: #2012

misc

  • [declarative]

    如果 __table_args__ 不是tuple或dict格式,也不是none。

    References: #1972

  • [sqlsoup]

    将“map_to()”方法添加到sqlsoop,这是一个“master”方法,它接受可选和映射的每个方面的显式参数,包括每个映射的基类。

    References: #1975

  • [sqlsoup]

    与map()一起使用的mapped selectables、with_labels()、join()方法不再将给定参数放入内部的“cache”字典中。尤其是因为join()和select()对象是在方法本身中创建的,所以这几乎是纯粹的内存泄漏行为。

0.6.5

Released: Sun Oct 24 2010

orm

  • [orm]

    添加了一个新的“lazyload”选项“immediateload”。在填充对象时自动发出通常的“惰性”加载操作。这里的用例是在加载要放在脱机缓存中的对象时,或者在会话不可用后使用的对象时,需要直接“select”加载,而不是“joined”或“subquery”。

    References: #1914

  • [orm]

    新的查询方法:query.label(name),query.a s_scalar(),将查询语句作为带/不带标签的标量子查询返回;query.with_entities( * 将查询的选择列表替换为新实体。大致相当于query.values()的生成形式,它接受映射实体和列表达式。

    References: #1920

  • [orm]

    修复了将对象从一个引用移动到另一个引用时可能出现的递归错误,其中涉及backrefs,其中启动的父级是上一个父级的子类(具有自己的映射器)。

  • [orm]

    修正了0.6.4中的回归,如果将空列表传递给mapper()上的“include_properties”,就会发生这种情况。

    References: #1918

  • [orm]

    修复了查询中的标记错误,即如果有列表达式未标记,则namedtuple将错误地应用标签。

  • [orm]

    修补了这样一种情况:query.join()会不适当地将左侧联接的右侧调整为右侧

    References: #1925

  • [orm]

    query.select ou from()已被增强,以帮助确保后续对query.join()的调用将使用select ou from()实体,假定它是一个映射的实体,而不是一个纯可选的,作为默认的“左侧”,而不是查询对象的实体列表中的第一个实体。

  • [orm]

    会话在子事务回滚之后使用时引发的异常(即在autocommit=false模式下刷新失败时发生的异常)现在已被改写(这是“由于子事务回滚而不活动”的消息)。特别是,如果回滚是由于flush()期间的异常导致的,那么消息将说明情况是这样的,并重申在flush期间发生的原始异常的字符串形式。如果会话由于子事务的显式使用而关闭(不是很常见),则消息只会说明情况是这样的。

  • [orm]

    映射器在初始化失败后对其初始化进行重复请求时引发的异常不再假设“hasattr”情况,因为在其他情况下会发出此消息,并且消息也不会多次复合到自身上-每次尝试使用时都会收到相同的消息。误称“compiles”的词被换成“initialize”。

  • [orm]

    修正了query.update()中的错误,如果列表达式键是一个类属性,并且其key name与实际列名称不同,则“evaluate”或“fetch”过期将失败。

    References: #1935

  • [orm]

    在刷新期间添加了一个断言,以确保不会在“新持久”对象上生成持有标识键的空值。当用户定义的代码无意中触发未完全加载的对象上的刷新时,可能会发生这种情况。

  • [orm]

    如果没有进行刷新,那么关系属性的延迟加载现在在发布SQL时使用的是当前状态,而不是外键和主键属性的“提交”状态。以前,只使用数据库提交状态。特别是,这将导致Lazyload上的多对一get()-操作失败,因为当确定属性并且“提交”状态可能不可用时,自动刷新不会在这些加载上触发。

    References: #1910

  • [orm]

    Relationship()上的一个新标志load_on_pending允许懒惰加载程序在不发生刷新的情况下对挂起的对象以及手动“附加”到会话的临时对象启动。请注意,此标志会阻止在加载对象时发生属性事件,因此在刷新之后backrefs才可用。该标志仅用于非常特定的用例。

  • [orm]

    relationship()上的另一个新标志cascade_backrefs在双向关系的“reverse”端启动事件时禁用“save update”cascade。这是一种更清晰的行为,这样可以在不将多对一对象卷入子对象会话的情况下,在不让前向集合级联的情况下,对一对象设置多对一。我们 可以 在0.7中默认为false。

  • [orm]

    当只在关系的多对一方放置时,对“被动更新=错误”行为的轻微改进;文档已澄清被动更新=错误实际上应该在一对多的一侧。

  • [orm]

    将被动删除=真放在多对一上会发出警告,因为您可能打算将其放在一对多的一边。

  • [orm]

    修复了阻止“subqueryload”正确处理子类关系的单表继承的错误-“where type in(x,y,z)”只放在内部,而不是重复。

  • [orm]

    当将from_self()与单表继承一起使用时,“where type in(x,y,z)”仅放在查询外部,而不是重复。可能会对此做更多的调整。

  • [orm]

    如果会话已经存在,则当调用configure()时,作用域会话发出警告(仅检查当前线程)

    References: #1924

  • [orm]

    重写了mapper.cascade_迭代器()的内部结构,以便在某些情况下将方法调用减少约9%。

    References: #1932

engine

  • [engine]

    修正了0.6.4中的回归,其中允许持续引发光标错误的更改会破坏result.lastrowid访问器。已为result.lastrowid添加测试覆盖率。注意,lastrowid只受pysqlite和一些mysql驱动程序的支持,因此在一般情况下并不是非常有用的。

  • [engine]

    引擎在首次使用连接时发出的日志消息现在是“begin(implicit)”,以强调dbapi没有显式begin()。

  • [engine]

    在metadata.reflect()中添加了“views=true”选项,将向被反射的视图添加可用视图的列表。

    References: #1936

  • [engine]

    引擎_config()现在接受'echo'、'echo_pool'、'force'和'convert_unicode'的'debug'、'use_native_unicode'的布尔值。

    References: #1899

sql

  • [sql]

    修正了typedecorator中的错误,即特定于方言的类型被拉入以生成给定类型的DDL,但并不总是返回正确的结果。

  • [sql]

    除了类型类之外,typedecorator现在还可以有一个完全构造的类型,指定为其“impl”。

  • [sql]

    typedecorator现在将自己作为二进制表达式的结果类型,其中类型强制规则通常会返回其impl类型-以前,会返回impl类型的副本,该副本将typedecorator作为“方言”impl嵌入其中,这可能是实现所需效果的无意方法。

  • [sql]

    typecorator.load_dialect_impl()默认情况下返回“self.impl”,即不是“self.impl”的方言实现类型。这是为了正确地支持编译。用户可以用与以前完全相同的方式重写行为,以达到相同的效果。

  • [sql]

    添加了类型“胁迫”(expr, type_) 表达式元素。在计算表达式和处理结果行时,将给定表达式视为给定类型,但不影响SQL的生成(匿名标签除外)。

  • [sql]

    table.tometata()现在也复制与该表相关联的索引对象。

  • [sql]

    如果给定的表已经存在于目标元数据中,table.tometadata()将发出警告-返回现有的表对象。

  • [sql]

    如果尚未分配名称的列(如声明性列)在导出到封闭select()构造的columns集合的上下文中使用,或者如果在分配该列的名称之前编译了涉及该列的任何构造,则会引发信息性错误消息。

  • [sql]

    作为_scalar(),可以对包含尚未命名的列的可选对象调用label()。

    References: #1862

  • [sql]

    修复了使用两个“nulltype”类型的表达式(而不是singleton nulltype实例)操作时可能发生的递归溢出。

    References: #1907

postgresql

  • [postgresql]

    向数组类型添加了“as tuple”标志,将结果作为元组而不是列表返回以允许哈希。

  • [postgresql]

    修复了阻止从自定义类型(如“枚举”)生成的“域”被反射的错误。

    References: #1933

mysql

  • [mysql]

    修复了由于taavi burns导致的与on update子句一起使用的当前时间戳默认值反射的错误。

    References: #1940

mssql

  • [mssql]

    修复了未正确处理未知类型反射的反射错误。

    References: #1946

  • [mssql]

    修正了“模式”表别名无法正确编译的错误。

    References: #1943

  • [mssql]

    重写索引的反射以使用sys。目录,以便可以反映任何配置(空格、嵌入逗号等)的列名。请注意,索引的反映需要SQL Server 2005或更高版本。

    References: #1770

  • [mssql]

    MSSQL+PYMSSQL方言现在支持URL的“端口”部分,而不是丢弃它。

    References: #1952

oracle

  • [oracle]

    无论检测到什么版本的Oracle,都可以使用隐式返回参数create_engine()。以前,如果服务器版本信息小于10,则该标志将被强制为假。

    References: #1878

misc

  • [declarative]

    @classproperty(soon/now@declaredu attr)对生效 __mapper_args__, __table_args__, __tablename__ 在不是mixin和mixin的基类上。

    References: #1922

  • [declarative]

    @ClassProperty用于声明性的正式名称/位置是sqlacalchemy.ext.declarative.declared_attr。同样的事情,但是移动到那里,因为它更多的是一个特定于声明性的“标记”,而不仅仅是一个属性技术。

    References: #1915

  • [declarative]

    修复了一个错误,即mixin上的列不能正确地传播到单个表或联接表继承方案,而该继承方案的属性名与列的属性名不同。

    References: #1930, #1931

  • [declarative]

    现在,mixin可以指定一个列来覆盖与超类关联的同名列。感谢Oystein Haaland。

  • [informix]

    少校 0.6版Informix方言的清理/现代化,由Florian Apolloner提供。

    References: #1906

  • [tests]

    NoSesqlAlchemyPlugin已经被移动到一个新的包“sqlAlchemy_Nose”,它与“sqlAlchemy”一起安装。这样,“nosetests”脚本就可以一如既往地工作,但也允许--with coverage选项在导入sqlachemy模块之前打开coverage,从而允许coverage正常工作。

  • [misc]

    CircularDependencyError现在有.cycles和.edges成员,它们是一个或多个循环中涉及的元素集,并且边缘集是2元组。

    References: #1890

0.6.4

Released: Tue Sep 07 2010

orm

  • [orm]

    名称ConcurrentModificationError已更改为StaleDataError,并且已修改描述性错误消息以准确反映问题所在。对于可能在“except:”子句中指定ConcurrentModificationError的方案,这两个名称在可预见的将来都将保持可用。

  • [orm]

    在标识映射中添加了一个互斥体,互斥体会删除针对迭代方法的操作,而迭代方法现在在返回iterable之前会预缓冲。这是因为异步GC可以随时通过GC线程删除项目。

    References: #1891

  • [orm]

    会话类现在出现在sqlacalchemy.orm.*中。对于需要一步会话构造函数的情况,我们将不再使用具有非标准默认值的create_session()。然而,大多数用户应该坚持使用sessionmaker()作为通用工具。

  • [orm]

    query.with_parent()现在接受临时对象,并将使用其pk/fk属性的非持久值来制定标准。文档还澄清了使用_Parent()的目的。

  • [orm]

    mapper()的include_properties和exclude_properties参数现在除了接受字符串外,还接受列对象作为成员。这样就可以消除相同的命名列对象(例如join()中的对象)的歧义。

  • [orm]

    如果针对join或其他单个可选对象(在.c.集合中包含具有相同名称的多个列)创建映射器,并且这些列未显式命名为相同或单独属性的一部分(或排除),则会发出警告。在0.7中,此警告是一个例外。请注意,当组合由于继承而发生时,不会发出此警告,因此属性仍然允许自然重写。在0.7中,这将进一步改进。

    References: #1896

  • [orm]

    mapper()的primary_key参数现在可以指定一系列列,这些列只是已映射可选对象的计算“primary key”列的一个子集,而不会引发错误。这有助于在可选的有效主键比实际标记为“主键”的可选的列数更简单的情况下,例如针对其主键列上的两个表的联接。

    References: #1896

  • [orm]

    一个已被删除的对象现在会得到一个“已删除”标志,该标志禁止将该对象重新添加到会话中,就像以前一样,该对象在访问其属性之前将静默地存在于标识映射中。make_transient()函数现在将重置此标志和“key”标志。

  • [orm]

    可以在已经是暂时的实例上安全地调用make_transient()。

  • [orm]

    如果在mapper()中,无论是直接形式还是派生形式的mapped selectable中,还是在without multiforphic selectable中,都没有出现多态性,则会在mapper()中发出警告,而不是静默地忽略它。在0.7中寻找这个例外。

  • [orm]

    当relationship()配置为不明确的参数时,另一个传递一系列发出的错误消息。不再提到“外键”设置,因为它几乎是不需要的,而且用户最好设置正确的foreignkey元数据,这是现在的建议。如果使用了“foreign_keys”,并且不正确,则消息表明该属性可能是不必要的。对属性的文档进行了补充。这是因为ML上所有混淆的relationship()用户似乎都在试图使用外键,这是由于消息的缘故,这只会进一步混淆它们,因为表元数据更清晰。

  • [orm]

    如果“secondary”表没有foreignkey元数据,并且没有设置任何外键,即使用户传递的是错误的信息,也假定primary/secondary联接表达式只应考虑,“secondary”中的所有列都是外部的。在任何情况下,使用“secondary”都不可能使外键位于其他位置。此时将发出警告而不是错误,映射成功。

    References: #1877

  • [orm]

    将O2M对象从一个集合移动到另一个集合,或者反之亦然,如果外键也是主键的成员,则在刷新期间,如果“多”侧的外键值的更改是“一”侧的主键更改的结果,或者如果“一”只是一个不同的物体。在一种情况下,一个支持级联的数据库已经级联了这个值,我们需要查看“新”的pk值来进行更新,而在另一种情况下,我们需要继续查看“旧”的值。现在我们来看看“旧”,假设被动更新=真,除非我们知道是一个pk开关触发了变化。

    References: #1856

  • [orm]

    版本号col的值可以手动更改,这将导致行的更新。版本更新和删除现在使用WHERE子句中version_id_列的“提交”值,而不是挂起的更改值。如果属性上存在手动更改,版本生成器也将被忽略。

    References: #1857

  • [orm]

    在与具体继承映射器一起使用时修复了merge()的用法。此类映射器通常具有所谓的“具体”属性,这些属性是子类属性,可以“禁用”父级的传播-这些属性需要允许merge()操作在没有效果的情况下通过。

  • [orm]

    为列映射的_集合(包括string、text()等)指定一个非基于列的参数将引发一条错误消息,该错误消息专门要求一个列元素,不再使用关于text()或literal()的错误信息误导。

    References: #1863

  • [orm]

    同样,对于relationship()、foreign_keys、remote_side、order_by-强制执行所有基于列的表达式-显式不允许使用字符串列表,因为这是一个非常常见的错误

  • [orm]

    动态属性不支持集合填充-为调用set_committed_value()以及将joinedLoad()或subqueryLoad()选项应用于动态属性而不是失败/静默失败添加了断言。

    References: #1864

  • [orm]

    修正了这样一个错误,即生成一个从同一列重复使用不同标签名称的查询派生的查询,通常在某些联合情况下,将无法将内部列完全传播到外部查询。

    References: #1852

  • [orm]

    对象_session()在出现未映射的实例时引发正确的UnmappedInstanceError。

    References: #1881

  • [orm]

    对计算出的映射器属性应用了进一步的memoitions,在严重的多态映射配置中,运行时mapper.py调用计数显著减少(~90%)。

  • [orm]

    不推荐使用版本控制示例使用的mapper get col_to_prop private方法;现在使用mapper.get_property_by_column(),它将保留此公共方法。

  • [orm]

    如果对以前为空的列进行版本控制,那么版本控制示例现在可以正常工作。

examples

  • [examples]

    烧杯缓存示例已经重新组织,这样会话、缓存管理器、声明性的库都是环境的一部分,自定义缓存代码是可移植的,现在在“caching-query.py”中。这使得示例更容易“插入”到现有项目中。

  • [examples]

    在复制列时,历史记录的元版本控制配方设置为“unique=false”,以便版本控制表处理具有重复值的多行。

    References: #1887

engine

  • [engine]

    对已耗尽、已关闭或不是返回结果的结果调用fetchone()或类似的方法现在会引发resourceclosederror,这是invalidrequesterror的子类,在所有情况下,无论后端如何。以前,一些dbapis会引发ProgrammingError(即pysqlite),而另一些dbapis则不会返回任何内容,从而导致下游崩溃(即mysql python)。

  • [engine]

    修复了连接错误,如果在第一个连接池连接的“初始化”阶段发生“断开连接”事件,当连接试图使DBAPI连接失效时,将引发attributeError。

    References: #1894

  • [engine]

    连接、resultproxy以及会话对所有“此连接/事务/结果已关闭”类型的错误使用resourceclosederror。

  • [engine]

    connection.invalidate()可以多次调用,后续调用不做任何操作。

sql

  • [sql]

    对alias()构造调用execute()将挂起0.7的折旧,因为它本身不是一个“可执行”构造。它目前“代理”其内部元素,并且有条件地“可执行”,但这不是我们现在喜欢的那种含糊不清。

  • [sql]

    子句元素的execute()和scalar()方法现在适当地移动到可执行子类中。clauseElement.execute()/scalar()仍然存在,并在0.7中挂起取消预测,但请注意,如果您不是可执行文件(除非您是alias(),请参阅前面的注释),这些操作将始终引发错误。

  • [sql]

    为numeric->integer添加了基本的数学表达式强制,这样无论表达式的方向如何,结果类型都是numeric。

  • [sql]

    更改了在列上使用“index=true”标志时用于生成截断的“auto”索引名称的方案。截断只使用自动生成的名称,而不是用户定义的名称(将引发错误),并且截断方案本身现在基于标识符名称的MD5哈希的片段,因此具有类似名称的列上的多个索引仍然具有唯一的名称。

    References: #1855

  • [sql]

    生成的索引名还基于“max index name length”属性,该属性与“max identifier length”分开,这是为了安抚mysql,其索引名的最大长度为64,与其最大总长度255分开。

    References: #1412

  • [sql]

    如果将text()构造放置在面向列的情况下,它将至少为其类型返回nullType而不是none,从而允许它比以前更自由地用于特殊列表达式。然而,literal_column()仍然是更好的选择。

  • [sql]

    在ForeignKey无法解析目标时引发的错误消息中添加了父表/列、目标表/列的完整描述。

  • [sql]

    修正了这样一个错误:替换反射表中的复合外键列将导致第二次尝试从表中删除反射约束,从而引发keyError。

    References: #1865

  • [sql]

    label结构,即每当你说somecol.label()时生成的结构,现在在其与包含列的代理集联合的“代理集”中进行计数,而不是直接返回包含列的代理集。这允许依赖于标签本身标识的列对应操作返回正确的结果。

  • [sql]

    修复ORM错误。

    References: #1852

postgresql

  • [postgresql]

    修正了psycopg2方言使用其set_isolation_level()方法,而不是依赖基本的“set session isolation”命令,因为psycopg2会重置每个新事务的隔离级别,否则。

mssql

  • [mssql]

    修复了“默认模式”查询以使用pymssql后端。

oracle

  • [oracle]

    在Oracle方言中添加了rowid类型,用于可能需要显式强制转换的情况。

    References: #1879

  • [oracle]

    已对索引的Oracle反射进行了优化,以便反射包含部分或所有主键列(但与主键列的列集不同)的索引。在反射中跳过包含与主键相同列的索引,因为在这种情况下,假定索引是自动生成的主键索引。以前,会跳过存在pk列的任何索引。感谢肯特·鲍尔的帮助。

    References: #1867

  • [oracle]

    甲骨文现在反映了主要关键约束的名称——也要感谢肯特鲍尔。

    References: #1868

firebird

  • [firebird]

    修正了列默认值无法反映“default”关键字是否为小写的错误。

misc

  • [declarative]

    如果@class property与常规的类绑定映射器属性一起使用,则在初始化期间将调用它以获取实际的属性值。目前,在声明性类的列或关系属性上使用@classproperty没有优势,而该声明性类不是mixin-评估与未使用@classproperty的同时使用。但在这里,我们至少允许它按预期运行。

  • [declarative]

    修复了“无法添加其他列”消息将显示错误名称的错误。

  • [informix]

    从应用了补丁,以再次获得基本的Informix功能。我们依靠最终用户测试来确保Informix在某种程度上工作。

    References: #1904

  • [documentation]

    文档已经被重新组织,这样“api引用”部分就不复存在了——来自那里的公共api的所有docstring都被转移到讨论它的主文档部分的上下文中。主文档分为“sqlachemy core”和“sqlachemy orm”两部分,映射器/关系文档已被分解。许多部分被重写和/或重新组织。

0.6.3

Released: Thu Jul 15 2010

orm

  • [orm]

    删除了UnitOfWork中不必要地触发过期/卸载集合的错误多对多加载。仅当被动u更新为false且父主键已更改,或者被动u删除为false且父项已发生删除时,才会进行此加载。

    References: #1845

  • [orm]

    列实体(即查询(foo.id))在从其自身派生查询时更完整地复制它们的状态+可选(即从_Self()、Union()等)复制它们,以便join()等具有正确的工作状态。

    References: #1853

  • [orm]

    修复了以下错误:如果查询非ORM列,则query.join()将失败:如果已经存在FROM子句,则在没有ON子句的情况下进行联接,此时将引发选中的异常,与该子句不存在时的情况相同。

    References: #1853

  • [orm]

    改进了对“未映射类”的检查,包括映射超类但不映射子类的情况。任何访问cls的尝试现在都会引发unmappedclasserror()。

    References: #1142

  • [orm]

    向查询添加了“column_descriptions”访问器,返回包含有关查询将返回的实体的命名/键入信息的字典列表。有助于在ORM查询上构建GUI。

mysql

  • [mysql]

    现在,_extract_error_code()方法对每个mysql方言(mysql python、oursql、mysql connector python、pyodbc)都能正常工作。以前,重新连接逻辑在操作错误条件下会失败,但是由于mysqldb和oursql有自己的重新连接功能,所以这里没有这些驱动程序的症状,除非有人查看日志。

    References: #1848

oracle

  • [oracle]

    对cx_Oracle十进制处理进行了更多调整。”不明确的“没有小数点的数字在连接处理程序级别被强制为int。这里的优点是,ints返回为ints,不涉及sqla类型对象,也不需要先转换为decimal。

    不幸的是,一些特殊的子查询案例甚至可以看到单个结果行之间的不同类型,因此当指示数字处理程序返回十进制时,它不能充分利用“本机十进制”模式,必须对每个值运行isInstance(),以检查其十进制数是否已经存在。重新开放

    References: #1840

0.6.2

Released: Tue Jul 06 2010

orm

  • [orm]

    query.join()将检查表单query.join(target,子句表达式)的调用,即缺少元组,并引发一条信息性错误消息,指出这是错误的调用表单。

  • [orm]

    修正了在自引用的双向多对多关系上刷新的错误,其中两个对象在一次刷新中相互引用,将无法为两侧插入一行。从0.5回归。

    References: #1824

  • [orm]

    Relationship()的后更新功能在架构上进行了重新设计,以便与新的0.6工作单元更紧密地集成。更改的动机是让多个“post update”调用(每个调用影响同一行中不同的外键列)在单个update语句中执行,而不是每行一个update语句。在保持一致的行顺序的同时,多行更新也被批处理到executemany()中。

  • [orm]

    query.statement、query.subquery()等现在将绑定参数的值(即query.params()指定的值)传输到生成的SQL表达式中。以前,值不会被传输,绑定参数将显示为无。

  • [orm]

    子查询抢先加载现在可以处理包含params()和get()查询的查询对象。

  • [orm]

    现在可以在父对象通过多对一引用的实例上调用make_transient(),而不将父对象的外键值临时设置为无-这是“检测主键开关”刷新处理程序的函数。它现在忽略不再处于“持久”状态的对象,并且父级的外键标识符不受影响。

  • [orm]

    query.order_by()现在接受false,这将取消查询中任何现有的order_by()状态,从而允许调用不支持order by的后续生成方法。这与传递none的现有功能不同,后者禁止任何现有的order_by()设置,包括在映射器上配置的设置。如果为false,则会使其看起来从未调用order_by(),而none是一个活动设置。

  • [orm]

    如果一个实例被移动到“瞬时”,它的主键属性集不完整或丢失,并且包含过期的属性,那么如果访问过期的属性而不是得到递归溢出,那么它将引发InvalidRequestError。

  • [orm]

    make_transient()函数现在在生成的文档中。

  • [orm]

    make_transient()从瞬态状态中删除所有“loader”可调用文件,删除任何“expired”状态-所有卸载的属性在访问时重置为未定义、无/空。

sql

  • [sql]

    convert为unicode=true的unicode和字符串类型发出的警告不再嵌入传递的实际值。这样,python警告注册表的大小就不会继续增长,根据警告过滤器设置发出一次警告,并且大字符串值不会污染输出。

    References: #1822

  • [sql]

    修复了防止重写子句编译为“带注释的”表达式元素(通常由ORM生成)工作的错误。

  • [sql]

    类似运算符或类似运算符“escape”的参数通过render_literal_value()传递,该函数可以实现反斜杠的转义。

    References: #1400

  • [sql]

    修复了枚举类型中的错误,当与typecorator或其他自适应方案一起使用时,该错误会吹走本机的枚举标志。

  • [sql]

    当调用Inspector以确保已调用Initialize时,它会点击bind.connect()。内部名称“.conn”更改为“.bind”,因为它就是这样。

  • [sql]

    修改了“column annotation”的内部结构,以便自定义的列子类可以安全地重写u构造函数以返回列,以便生成不涉及代理的“配置”列类等。

  • [sql]

    column.copy()继承了“unique”属性,修复了有关声明性混合的问题。

    References: #1829

postgresql

  • [postgresql]

    render_literal_value()将被重写,它将转义反斜杠,目前应用于like和类似表达式的转义子句。最终,这将必须检测“标准符合”字符串的值以实现完整的行为。

    References: #1400

  • [postgresql]

    如果在8.3之前的pg版本上使用types.enum,则不会生成“create type”/“drop type”-完全遵守支持u本机u枚举标志。

    References: #1836

mysql

  • [mysql]

    检测到MySQL版本<4.0.2时,MySQL方言不发出cast()。这允许在连接时进行Unicode检查。

    References: #1826

  • [mysql]

    MySQL方言现在检测不到除ansi_引号之外的u反斜杠u转义SQL模式。

  • [mysql]

    render_literal_value()将被重写,它将转义反斜杠,目前应用于like和类似表达式的转义子句。此行为是从检测no反斜杠转义的值派生而来的。

    References: #1400

mssql

  • [mssql]

    如果服务器版本信息超出(8,)、(9,)、(10,)的常规范围,则会发出警告,建议检查Freetds版本配置是否使用7.0或8.0,而不是4.2。

    References: #1825

oracle

  • [oracle]

    修复了ORA-8兼容性标志,使它们不会在第一个数据库连接实际发生之前缓存过时的值。

    References: #1819

  • [oracle]

    Oracle的“本机十进制”元数据开始返回有关数字的不明确的键入信息,例如,列嵌入子查询时,以及对rownum与子查询进行咨询时,就像我们对限制/偏移量所做的那样。我们已经将这些不明确的条件添加到了cx_oracle“convert to decimal()”处理程序中,这样我们在更多情况下将数字作为十进制而不是作为浮点接收。然后,如果需要,将这些值转换为整数或浮点值,或者保存为无损十进制值。

    References: #1840

firebird

  • [firebird]

    修复了do_execute()中的错误签名,0.6.1中引入了错误。

    References: #1823

  • [firebird]

    Firebird方言添加了接受“char set”标志的char、varchar类型,以支持Firebird“character set”子句。

    References: #1813

misc

  • [declarative]

    添加了对@classproperty的支持,以从声明性mixin提供任何类型的架构/映射构造,包括带有外键的列、关系、列_属性、延迟。这解决了声明性混合的所有问题。如果未使用@classproperty在mixin上指定任何mapperproperty子类,则会引发错误。

    References: #1751, #1796, #1805

  • [declarative]

    现在,mixin类可以定义与 __table__ 在子类上定义。但是,它不能定义不存在于 __table__, 这里的错误信息现在可以工作了。

    References: #1821

  • [compiler] [extension]

    当重写内置子句构造的编译时,将自动复制“default”编译器,因此,如果用户定义的编译器特定于某些后端,并且调用了不同后端的编译,则不会引发keyError。

    References: #1838

  • [documentation]

    为检查员添加了文档。

    References: #1820

  • [documentation]

    修复了@memoized_属性和@memoized_instancemethod修饰符,以便sphinx文档获取这些属性和方法,例如resultProxy.inserted_primary_key。

    References: #1830

0.6.1

Released: Mon May 31 2010

orm

  • [orm]

    0.6.0中引入的固定回归涉及对可变属性的不正确历史会计。

    References: #1782

  • [orm]

    修复了在0.6.0工作单元重构中引入的回归,该重构中断了具有post_update=true的双向关系()的更新。

    References: #1807

  • [orm]

    如果返回的实例处于“挂起”状态,则session.merge()不会使该实例的属性过期。

    References: #1789

  • [orm]

    固定的 __setstate__ 在父InstanceState尚未取消序列化的情况下,CollectionAdapter的方法在反序列化期间不会失败。

    References: #1802

  • [orm]

    添加了内部警告,以防没有完整pk的实例正好过期,然后被要求刷新。

    References: #1797

  • [orm]

    为映射器的更新、插入和删除表达式的使用添加了更积极的缓存。假设语句没有附加每个对象的SQL表达式,则在第一次创建之后,映射器会缓存表达式对象,并且在相关引擎的持续时间内,它们的编译形式会持久地存储在缓存字典中。缓存是一个lrucache,因为很少有映射器在更新时接收到大量不同的列模式。

sql

  • [sql]

    expr.in_()现在接受一个text()构造作为参数。分组括号是自动添加的,即用法如下 col.in_(text("select id from table")) .

    References: #1793

  • [sql]

    二进制类型的列(即largebinary、blob等)也会将右侧的“basestring”强制为二进制,以便进行所需的DBAPI处理。

  • [sql]

    添加了table.add_依赖于(otherTable),允许在两个表对象之间手动放置依赖规则,以便在create_all()、drop_all()、sorted_tables中使用。

    References: #1801

  • [sql]

    修复了使用包含零的复合主键阻止隐式返回正常工作的错误。

    References: #1778

  • [sql]

    固定了为指定的唯一约束生成添加约束时的错误空间字符。

  • [sql]

    固定了foreignkeyconstraint构造函数上的“table”参数

    References: #1571

  • [sql]

    修复了连接池光标包装器中的错误,如果光标在close()上引发异常,则消息的日志记录将失败。

    References: #1786

  • [sql]

    columnClause和column的_make_proxy()方法现在使用 self.__class__ 要确定要返回的对象的类,而不是硬编码到columnclause/column,这使得生成在别名/子查询情况下工作的对象的特定子类稍微容易一些。

  • [sql]

    func.xxx()不会无意中解析为非函数类(例如fixes func.text())。

    References: #1798

mysql

  • [mysql]

    func.sysdate()在mysql上发出“sysdate()”,即带有结束括号。

    References: #1794

sqlite

  • [sqlite]

    修正了当“primary key”约束由于呈现sqlite autoincrement关键字而移动到列级时约束的串联。

    References: #1812

oracle

  • [oracle]

    添加了对低于版本5的cx_Oracle版本的检查,在这种情况下,将不会使用不兼容的“输出类型处理程序”。这将影响十进制精度和某些Unicode处理问题。

    References: #1775

  • [oracle]

    修正了使用“ansi=false”模式,它在几乎所有情况下都会产生中断的where子句。

    References: #1790

  • [oracle]

    使用cx_oracle重新建立对Oracle 8的支持,包括将use_ansi自动设置为false、nvarchar2和nclob不呈现为unicode、“native unicode”检查不失败、禁用cx_oracle“native unicode”模式、以字节计数而不是字符计数发出varchar()。

    References: #1808

  • [oracle]

    OracleXe5在正常的python 2.x模式下不接受其连接字符串中的pythonUnicode对象,因此我们直接强制使用str()。这里的连接字符串不支持非ASCII字符,因为我们不知道可以使用什么编码。

    References: #1670

  • [oracle]

    当使用限制/偏移量(即rownum子查询)时,在语法正确的位置发出for update。但是,Oracle不能真正处理ORDER BY或WITH子查询的更新,因此它仍然不太可用,但至少sqla可以让SQL通过Oracle解析器。

    References: #1815

firebird

  • [firebird]

    向has_table()和has_sequence()中使用的查询添加了一个标签,用于处理不为结果列提供标签的旧版本FireBird。

    References: #1521

  • [firebird]

    在通过查询字符串传递时,向“type_conv”属性添加了整数强制,以便由kinterbasdb正确解释。

    References: #1779

  • [firebird]

    已将“连接关闭”添加到指示已删除连接的异常字符串列表中。

    References: #1646

misc

  • [engines]

    修复了在python 2.4上构建C扩展的问题。

    References: #1781

  • [engines]

    pool类将在dispose()发生后重用相同的“pool_logging_name”设置。

  • [engines]

    引擎获得一个“Execution_Options”参数并更新“Execution_Options()方法,该方法将应用于此引擎生成的所有连接。

  • [sqlsoup]

    sqlsoup构造函数接受 base 参数,指定用于映射类的基类,默认值为 object .

    References: #1783

0.6.0

Released: Sun Apr 18 2010

orm

  • [orm]

    工作单元内部已经重写。具有大量对象的工作单元相互依赖的对象现在可以在不使用递归溢出的情况下刷新,因为不再依赖于递归调用。对于特定的会话状态,内部结构的数量现在保持不变,而不管映射上存在多少关系。事件流现在对应于一个步骤的线性列表,这些步骤由映射器和基于要完成的实际工作的关系生成,通过一个拓扑排序进行过滤以获得正确的顺序。使用更少的步骤和更少的内存组装刷新操作。

    References: #1081, #1742

  • [orm]

    随着UOW的重写,这也消除了0.6beta3中引入的一个关于具有长依赖循环的工作单元的拓扑循环检测的问题。我们现在使用guido编写的算法(谢谢guido!).

  • [orm]

    一对多关系现在在刷新中维护一个积极的父子关联列表,防止标记为已删除的以前的父级在这些子对象上级联设置的删除或空外键,尽管最终用户没有从旧关联中删除子级。

    References: #1764

  • [orm]

    集合延迟加载将关闭反向多到一侧的默认热切加载,因为根据定义,该加载是不必要的。

    References: #1495

  • [orm]

    现在,session.refresh()首先对给定的实例执行等效的expire(),以便传播“refresh expire”级联。以前,refresh()不会受到存在“refresh expire”级联的任何影响。这是相对于0.6beta2的行为变化,其中传递给refresh()的“lockMode”标志将导致发生版本检查。由于实例首次过期,refresh()始终将对象升级到最新版本。

  • [orm]

    当到达挂起的对象时,“刷新过期”层叠将删除该对象,如果层叠还包含“删除孤立对象”,或者只是将其分离。

    References: #1754

  • [orm]

    id(obj)不再在topology.py内部使用,因为排序函数现在只需要哈希对象。

    References: #1756

  • [orm]

    默认情况下,ORM会将所有生成的描述符的docstring设置为none。这可以使用“doc”(或者如果使用sphinx,属性docstrings也可以使用)。

  • [orm]

    将kw参数'doc'添加到所有映射器属性可调用文件以及列()。将字符串“doc”组合为描述符上的“uuu doc_uuu”属性。

  • [orm]

    在支持cursor.rowcount for execute()但不支持executeMany()的后端上使用version_id_col现在在发出删除时有效(因为那些不使用executeMany()的文件已经用于保存)。对于根本不支持cursor.rowcount的后端,将发出与saves相同的警告。

    References: #1761

  • [orm]

    ORM现在短期缓存insert()和update()构造的“已编译”形式,以便在刷新所有同一类的对象列表时避免在单个flush()调用中对每个单独的insert/update进行重复编译。

  • [orm]

    ColumnProperty、CompositeProperty、RelationshipProperty上的内部getAttr()、setAttr()、getCommitted()方法已下划线(即私有),签名已更改。

examples

  • [examples]

    更新了attribute_shard.py示例,以使用更强大的方法搜索二进制表达式查询,以比较列与文本值。

sql

  • [sql]

    已从0.5还原了一些绑定标签逻辑,该逻辑确保列名与表单“<tablename>的另一列重叠的表在更新期间不会产生错误。<u label用作绑定名称。增加了0.5中没有的测试覆盖率。

    References: #1755

  • [sql]

    somejoin.select(fold_equivalents=true)不再被弃用,并最终将被转入的功能的更全面的版本。

    References: #1729

  • [sql]

    numeric类型引发 巨大的 当期望从返回float的dbapi将float转换为decimal时发出警告。这包括sqlite、sybase、ms-sql。

    References: #1759

  • [sql]

    修复了表达式类型中的错误,该错误导致具有两个空类型的表达式出现无休止的循环。

  • [sql]

    修正了执行中的错误,即父连接中的现有事务和其他状态信息不会传播到子连接。

  • [sql]

    添加了新的“编译缓存”执行选项。当连接将子句表达式编译成方言和参数特定的编译对象时,将缓存已编译对象的字典。用户有责任管理此字典的大小,其中包含与方言、子句元素、插入或更新的值或集合子句中的列名对应的键,以及插入或更新语句的“批处理”模式。

  • [sql]

    将get_pk_constraint()添加到reflection.inspector,与get_primary_keys()类似,只是返回一个包含约束名称的dict,用于支持的后端(pg到目前为止)。

    References: #1769

  • [sql]

    table.create()和table.drop()不再应用元数据级的创建/删除事件。

    References: #1771

postgresql

  • [postgresql]

    PostgreSQL现在在序列名称更改后正确地反映了与序列列关联的序列名。感谢Kumar McMillan提供补丁。

    References: #1071

  • [postgresql]

    已修复psycopg2中缺少的导入。_收到未知数字时pgnumeric类型。

  • [postgresql]

    psycopg2/pg8000方言现在意识到真实 [“浮动”] ,双精度 [[数字]] 返回类型而不引发异常。

  • [postgresql]

    PostgreSQL反映主键约束的名称(如果存在)。

    References: #1769

oracle

  • [oracle]

    现在使用cx-oracle输出转换器,以便dbapi以本机方式返回我们喜欢的值类型:

  • [oracle]

    带正精度+小数位数的数值转换为cx_oracle.string,然后转换为十进制。这使得在使用cx_oracle时,数字类型具有完美的精度。

    References: #1759

  • [oracle]

    string/fixed_char现在可以本机转换为unicode。然后,SQLAlchemy的字符串类型就不需要应用任何类型的转换。

firebird

  • [firebird]

    通过在create_engine()上设置“enable_rowcount=false”,可以基于每个引擎禁用result.rowcount的功能。通常,cursor.rowcount在任何update或delete语句之后都会无条件地调用,因为此时光标将关闭,而firebird需要打开光标才能获取rowcount。但是,此呼叫稍贵,因此可以禁用。要在每次执行的基础上重新启用,可以使用“启用行数=真”执行选项。

misc

  • [engines]

    C扩展现在也可以与dbapis一起使用,dbapis使用自定义序列作为行(而不仅仅是元组)。

    References: #1757

  • [ext]

    编译器扩展现在允许@compiles修饰符对扩展到子类的基类进行编译,@compiles修饰符对未被基类上的@compiles修饰符破坏的子类进行编译。

  • [ext]

    如果在基于字符串的relationship()参数中引用了未映射的类属性,则声明性将引发信息性错误消息。

  • [ext]

    进一步修改了声明性中的“mixin”逻辑,以另外允许 __mapper_args__ 作为mixin上的@classproperty,例如动态分配多态性标识。

0.6beta3

Released: Sun Mar 28 2010

orm

  • [orm]

    主要功能:为relationship()添加了新的“subquery”加载功能。这是一个热切的加载选项,它为查询中表示的每个集合同时跨所有父集合生成第二个select。查询重新发出包装在子查询中的原始最终用户查询,将联接应用到目标集合,并在一个结果中完全加载所有这些集合,类似于“联接”的热切加载,但使用所有内部联接,而不是重复地重新获取完整的父行(就像大多数dbapis所做的那样,即使跳过了列)。使用“lazy='subquery'”可以在mapper配置级别加载子查询,使用“subqueryload(props..”,“subqueryload_all(props…)”可以在查询选项级别加载子查询。

    References: #1675

  • [orm]

    为了适应这样一个事实,现在有两种可用的预加载,新的名称是joinedload()和joinedload_all()。在可预见的将来,旧名称仍将作为同义词。

  • [orm]

    函数relationship()上的“lazy”标志现在接受用于各种加载的字符串参数:“select”、“joined”、“subquery”、“noload”和“dynamic”,其中默认值现在为“select”。“真/假/无”的旧值仍保留其通常含义,在可预见的未来仍将作为同义词。

  • [orm]

    添加了带有hint()方法的query()构造。这直接调用select()。使用_hint(),还接受实体以及表和别名。请参阅下面的SQL部分中的with_hint()。

    References: #921

  • [orm]

    修正了查询中的错误,通过调用q.join(prop).from_self(…)。join(prop)将无法在子查询外部呈现第二个join,当使用与内部相同的条件进行联接时。

  • [orm]

    修复了查询中的错误,即如果在由q.from_self()或q生成的子查询中引用了基础表(而不是实际别名),则使用aliased()构造将失败。请选择_from()。

  • [orm]

    修正了影响所有的chengload()和类似选项的bug,比如“远程”的chengload,也就是说,从一个懒惰的加载(比如查询(a))中进行的chengload不会进行任何加载,但是使用chengload(“b.c”)会很好地工作。

  • [orm]

    查询获得一个添加列( * columns)方法,它是添加列(col)的多版本。添加列(col)将被弃用。

  • [orm]

    query.join()将检测最终结果是否为“来自联接A”,如果是,将引发错误。

  • [orm]

    query.join(cls.propname,from_joinpoint=true)将更仔细地检查“cls”是否与当前joinpoint兼容,并在这方面与query.join(“propname,from_joinpoint=true”)的操作方式相同。

sql

  • [sql]

    在select()结构中添加了u hint()方法。指定一个表/别名、提示文本和可选方言名称,并且“提示”将在语句的适当位置呈现。适用于Oracle、Sybase、MySQL。

    References: #921

  • [sql]

    修复了0.6beta2中引入的错误,列标签将在已分配标签的列表达式内部呈现。

    References: #1747

postgresql

  • [postgresql]

    psycopg2方言将通过“sqlacalchemy.dialogens.postgresql”记录器名称记录通知消息。

    References: #877

  • [postgresql]

    时间和时间戳类型现在可以直接从PostgreSQL方言中获得,后者将pg特定的参数'precision'添加到这两者中。“精确”和“时区”对于时间和时区类型都正确反映。

    References: #997

mysql

  • [mysql]

    不再猜测反射时tinyint(1)应为布尔值-返回tinyint(1)。在表定义中使用布尔/布尔值来获取布尔转换行为。

    References: #1752

oracle

  • [oracle]

    Oracle方言将使用字符计数来发布varchar类型定义,即varchar2(50个字符),以便按字符而不是字节来调整列的大小。字符类型的列反射也将使用all_tab_columns.char_length而不是all_tab_columns.data_length。当服务器版本为9或更高时,这两种行为都会生效-对于版本8,使用旧的行为。

    References: #1744

misc

  • [declarative]

    如果mixin实现了不可预知的getattribute_uuuuu(),即zope接口,那么使用mixin不会中断。

    References: #1746

  • [declarative]

    在mixin上使用@classdecorator和类似工具来定义 __tablename__, __table_args__, 如果方法引用了最终子类上的属性,那么现在就可以工作了。

    References: #1749

  • [declarative]

    抱歉,声明性混合不允许使用带有外键的关系和列。

    References: #1751

  • [ext]

    sqlAlchemy.orm.shard模块现在成为扩展,sqlAlchemy.ext.horizontal_shard。旧的导入操作带有一个折旧警告。

0.6beta2

Released: Sat Mar 20 2010

orm

  • [orm]

    relation()函数的正式名称现在是relationship(),以消除对关系代数项的混淆。但是,在可预见的将来,relation()仍将以相同的容量提供。

    References: #1740

  • [orm]

    向mapper添加了“version_id_generator”参数,这是一个可调用的参数,给定“version_id_col”的当前值,将返回下一个版本号。可用于替代版本方案,如UUID、时间戳。

    References: #1692

  • [orm]

    在session.refresh()中添加了“lockmode”kw参数,将通过字符串值进行查询,与在with_lockmode()中查询的值相同,还将执行版本检查以获取版本u id_col-enabled映射。

  • [orm]

    修正了在联合继承方案中调用query(a).join(a.bs).add_实体(b)会将b作为目标并产生无效查询的错误。

    References: #1188

  • [orm]

    修复了session.rollback()中的错误,该错误涉及到在重新集成“已删除”对象之前,不从会话中删除以前的“挂起”对象,通常使用自然主键。如果它们之间存在主键冲突,则被删除项的附加将在内部失败。以前的“挂起”对象现在先被删除。

    References: #1674

  • [orm]

    删除了很多没有人真正关心的日志,剩下的日志将响应日志级别中的实时更改。不增加显著的开销。

    References: #1719

  • [orm]

    修正了session.merge()中阻止类似dict的集合合并的错误。

  • [orm]

    session.merge()可以处理那些在级联选项中特别不包含“merge”的关系-目标将被完全忽略。

  • [orm]

    如果目标具有该属性的值,则session.merge()不会使现有目标上的现有标量属性过期,即使传入的合并对象没有该属性的值。这可以防止对现有项目进行不必要的加载。但是,如果目的地没有ATTR,则仍然会将ATTR标记为已过期,这将履行延迟的cols的一些合同。

    References: #1681

  • [orm]

    “allow_null_pks”标志现在被称为“allow_partial_pks”,默认为true,与0.5中的情况类似。但是,它也在merge()中实现,这样,如果标志为false,则不会为部分为空主键的传入实例发出select。

    References: #1680

  • [orm]

    修正了0.6中的错误——修改了“多对一”的优化,使得针对远程表上的非主键列的多对一(即针对唯一列的外键)将在更改期间从数据库中拉入“旧”值,因为如果它在会话中,我们将需要它来进行适当的历史记录/backref记帐,并且我们无法拉入f从非主键列上的本地标识映射。

    References: #1737

  • [orm]

    修复了在单个表继承关系()上调用has()或类似的复杂表达式时可能发生的内部错误。

    References: #1731

  • [orm]

    query.one()不再对查询应用限制,这可以确保它完全计算结果中存在的所有对象标识,即使在联接可能隐藏两行或多行的多个标识的情况下也是如此。另一个好处是,现在还可以使用从_statement()发出的查询来调用one(),因为它不再修改查询。

    References: #1688

  • [orm]

    如果查询到标识映射中存在与请求的类不同的标识符(即使用多态加载时),则query.get()现在返回none。

    References: #1727

  • [orm]

    query.join()中的一个主要修复程序,当“on”子句是aliased()构造的一个属性,但已经有一个与兼容目标建立的现有联接时,query将正确联接到右aliased()构造,而不是停留在现有联接的右侧。

    References: #1706

  • [orm]

    在所谓的“行切换”操作(即添加+删除具有相同pk的两个对象)期间,对不发出不必要的主键列更新的修复进行了轻微改进。

    References: #1362

  • [orm]

    当属性加载或刷新操作因对象从任何会话中分离而失败时,现在使用sqlAlchemy.orm.exc.DetachedInstanceError。UnboundExecutionError特定于绑定到会话和语句的引擎。

  • [orm]

    在表达式上下文中调用的查询在所有情况下都将呈现消除歧义的标签。请注意,这不适用于现有的.statement和.subquery()访问器/方法,它们仍然采用默认为false的.with_labels()设置。

  • [orm]

    union()在返回的语句中保留消除歧义的标签,从而避免了由于列名冲突而导致的各种SQL组合错误。

    References: #1676

  • [orm]

    修复了不经意调用的属性历史记录中的错误 __eq__ 在映射的实例上。

  • [orm]

    一些对象加载的内部流线化为大的结果提供了一个小的加速,估计在10-15%左右。给了“状态”内部一个很好的、不太复杂的、数据成员、方法调用和空白字典创建的、可靠的清理。

  • [orm]

    用于查询的文档说明。删除()

    References: #1689

  • [orm]

    修正了属性设置为none时多对一关系()中的级联错误,在R6711中引入(在add()期间将删除的项级联到会话中)。

  • [orm]

    在调用query.order_by()或query.distinct()之前调用query.order_by()或query.distinct()。select_from()、query.with_多态()或query.from_语句()立即引发异常,而不是无提示地删除这些条件。

    References: #1736

  • [orm]

    如果返回多行,query.scalar()现在将引发异常。所有其他行为保持不变。

    References: #1735

  • [orm]

    修正了导致“行切换”逻辑的错误,即插入和删除被更新所取代,当版本使用时失败。

    References: #1692

examples

  • [examples]

    稍微更改了烧杯缓存示例,以便为Lazyload缓存提供单独的RelationCache选项。此对象通过将多个属性分组为一个公共结构,可以更有效地在任意数量的潜在属性中进行查找。单独使用fromcache和relationcache都比较简单。

sql

  • [sql]

    join()现在将默认模拟自然联接。也就是说,如果左侧是一个连接,它将首先尝试将右侧连接到左侧的最右侧,并且如果成功,则不会引发关于不明确连接条件的任何异常,即使左侧的其余部分有更多的连接目标。

    References: #1714

  • [sql]

    最常见的结果处理器转换功能被移到新的“处理器”模块。鼓励方言作者在满足需求时使用这些函数,而不是实现自定义函数。

  • [sql]

    SchemaType和Boolean、Enum子类现在是可序列化的,包括它们的DDL侦听器和其他事件可调用文件。

    References: #1694, #1698

  • [sql]

    现在,一些平台将某些文字值解释为非绑定参数,并逐字呈现到SQL语句中。这是为了支持一些平台(包括MS-SQL和Sybase)实施的严格的SQL-92规则。在此模型中,select的columns子句中不允许使用bind参数,某些不明确的表达式也不允许使用“?=?”。启用此模式时,基编译器将把绑定呈现为内联文本,但只跨字符串和数值。其他类型(如日期)将引发错误,除非方言子类为这些类型定义了文本呈现函数。bind参数必须已经有一个嵌入的文字值,否则会引发错误(即不能与直bindparam(“x”)一起使用)。方言还可以扩展到不接受绑定的区域,例如在函数的参数列表中(使用本机SQL绑定时,这些参数列表不适用于MS-SQL)。

  • [sql]

    将“unicode-errors”参数添加到字符串、unicode等。其行为类似于标准库的string.decode()函数的“errors”关键字参数。此标志要求 convert_unicode 设置为 "force" -否则,不能保证SQLAlchemy处理Unicode转换任务。注意,对于已经本机返回Unicode对象的后端(大多数dbapis都会这样做)的行提取操作,此标志增加了显著的性能开销。此标志只能用作从具有不同或损坏编码的列中读取字符串的绝对最后手段,该方法仅适用于首先接受无效编码的数据库(即mysql)。 not pg、sqlite等)

  • [sql]

    添加了数学否定运算符支持,-x。

  • [sql]

    函数元素子类现在可以直接执行,就像任何func.foo()构造一样,当传递到execute()时,将应用自动选择。

  • [sql]

    func.foo()构造的“type”和“bind”关键字参数现在是“func.”构造的本地参数,不是FunctionElement基类的一部分,允许在自定义构造函数或类级变量中处理“type”。

  • [sql]

    已将keys()方法还原为resultproxy。

  • [sql]

    类型/表达式系统现在可以更完整地确定表达式中的返回类型,并根据给定表达式的完整左/右/运算符,将python运算符调整为SQL运算符。尤其是,为PostgreSQL Extract in创建的日期/时间/间隔系统现在已被概括为类型系统。“column+literal”表达式经常出现的强制“literal”类型与“column”类型相同的行为现在通常不会出现-“literal”类型首先从该文本的python类型派生,假定为标准的本机python类型+日期类型,然后返回到表达式的另一面。如果“fallback”类型是兼容的(即char-from-string),则文本端将使用该类型。typecorator类型在默认情况下重写此项,以无条件地强制“literal”端,可以通过实现强制的“compared”value()方法来更改它。也是其中的一部分。

    References: #1647, #1683

  • [sql]

    使sqlachemy.sql.expressions.executable成为公共API的一部分,用于可发送到execute()的任何表达式构造。FunctionElement现在继承可执行文件,从而获得Execution_Options(),它还传播到Execute()中生成的select()。可执行的子类_generative,它标记了任何支持@u generative decorator的子句元素-为了编译器扩展的利益,这些子类在某些时候也可能成为“公共”子类。

  • [sql]

    对最终用户定义的绑定参数名称的解决方案的更改与直接从更新/插入的set或values子句生成的名为bind的列直接冲突,将生成编译错误。这减少了调用计数,并消除了一些仍然可能发生不需要的名称冲突的情况。

    References: #1579

  • [sql]

    column()如果没有外键(这不是新的),则需要一个类型。如果column()没有类型和外键,则现在会引发错误。

    References: #1705

  • [sql]

    numeric()类型的“scale”参数在将返回的浮点值强制转换为十进制字符串时是很重要的-这允许在sqlite、mysql上运行准确性。

    References: #1717

  • [sql]

    column的copy()方法现在复制未初始化的“on table attach”事件。帮助实现新的声明性“mixin”功能。

mysql

  • [mysql]

    修正了反射错误,当存在collate时,不反映可空标志和服务器默认值。

    References: #1655

  • [mysql]

    固定了tinyint(1)“布尔”列的反射,这些列使用整数标志(如无符号)定义。

  • [mysql]

    MySQL连接器方言的进一步修复。

    References: #1668

  • [mysql]

    innodb上的复合pk表,其中“autoincrement”列不是第一列,它将在create table中发出一个显式的“key”短语,从而避免了错误。

    References: #1496

  • [mysql]

    增加了对各种mysql关键字的反射/创建表支持。

    References: #1634

  • [mysql]

    修复了在Windows主机上反射表时可能发生的导入错误

    References: #1580

sqlite

  • [sqlite]

    添加了“native_datetime=true”标志以创建_engine()。这将导致日期和时间戳类型跳过所有绑定参数和结果行处理,前提是已在连接上启用parse-decltypes。请注意,这与将作为字符串返回的“func.current_date()”不完全兼容。

    References: #1685

mssql

  • [mssql]

    重新建立了对pymssql方言的支持。

  • [mssql]

    针对隐式返回、反射等的各种修复——MS-SQL方言在0.6中还没有完全完成(但很接近)

  • [mssql]

    增加了对mxodbc的基本支持。

    References: #1710

  • [mssql]

    删除了文本_as_varchar选项。

oracle

  • [oracle]

    “out”参数需要cx_oracle支持的类型。如果找不到cx_Oracle类型,则将引发错误。

  • [oracle]

    Oracle“日期”现在不执行任何结果处理,因为Oracle中的日期类型存储完整的日期+时间对象,这就是您将得到的结果。请注意,泛型类型。日期类型 will 但是,仍然对传入值调用value.date()。反射表时,反射类型将为“日期”。

  • [oracle]

    添加了对使用u unicode模式的Oracle的初步支持。至少这为使用python 3的cx-oracle建立了初始支持。当在python 2.xx中使用with unicode模式时,会发出一个巨大而可怕的警告,要求用户认真考虑使用这种困难的操作模式。

    References: #1670

  • [oracle]

    except()方法现在在Oracle上呈现为减号,这在该平台上或多或少是等效的。

    References: #1712

  • [oracle]

    添加了对使用时区呈现和反射时间戳的支持,即时间戳(time zone=true)。

    References: #651

  • [oracle]

    现在可以反映Oracle间隔类型。

misc

  • [py3k]

    改进了关于python 3的安装/测试设置,现在在py3k上运行distribute。有关python 3安装/测试说明,请参阅readme.py3k。

  • [engines]

    添加了可选的C扩展,通过重新实现rowproxy和最常见的结果处理器来加速SQL层。实际的加速将在很大程度上取决于您的DBAPI和表中使用的数据类型组合,并且可以从30%的改进到200%以上。它还为大型查询的ORM速度提供了适度的(约15-20%)间接改进。注意它是 not 默认情况下已生成/安装。有关安装说明,请参阅自述文件。

  • [engines]

    在“自动提交”场景中对DBAPI连接调用commit()之前,执行序列从光标中提取所有行数/最后插入的ID信息。这有助于mxodbc使用行数,总体来说可能是个好主意。

  • [engines]

    打开日志记录一点,以便更频繁地调用isEnabledfor(),以便对引擎/池的日志级别所做的更改将反映在下一个连接上。这会增加少量的方法调用开销。这是可以忽略的,并且当调用create_engine()后恰好配置了日志记录时,它将使所有这些情况的生活更加容易。

    References: #1719

  • [engines]

    断言unicode标志已弃用。当要求SQLAlchemy对非Unicode Python字符串进行编码时,以及当显式传递Unicode或UnicodeType类型时,SQLAlchemy将在所有情况下发出警告。对于已经接受python unicode对象的dbapis,字符串类型将不起任何作用。

  • [engines]

    绑定参数以元组而不是列表的形式发送。一些后端驱动程序不接受绑定参数作为列表。

  • [engines]

    threadLocal引擎在close()时未正确关闭连接-已修复此问题。

  • [engines]

    如果事务对象不是“活动的”,则它不会回滚或提交,从而允许更准确地嵌套begin/rollback/commit。

  • [engines]

    绑定python unicode对象会导致unicode类型,而不是字符串,从而消除了不支持unicode绑定的驱动程序上的某类unicode错误。

  • [engines]

    在create_engine()、pool()构造函数中添加了“logging_name”参数,在create_engine()中添加了“pool_logging_name”参数,该参数可以过滤到pool的参数。在日志消息的“名称”字段中发出给定的字符串名称,而不是默认的十六进制标识符字符串。

    References: #1555

  • [engines]

    方言的visit_pool()方法被删除,并替换为on_connect()。此方法返回一个可调用文件,该文件在创建每个连接后接收原始DBAPI连接。如果不是“无”,则通过连接策略将可调用程序组装到第一个连接/连接池侦听器中。为方言提供了一个更简单的界面。

  • [engines]

    静态池现在在不打开新连接的情况下初始化、释放和重新创建-只有在第一次请求时才打开连接。Dispose()现在也可以用于断言池。

    References: #1728

  • [metadata] [ticket: 1673]

    添加了在使用“tometata”时通过将“schema=none”作为参数来剥离模式信息的功能。如果未指定架构,则保留表的架构。

  • [declarative]

    声明元专用 cls.__dict__ (不是) dict_) 作为类信息的源;“作为”声明性只使用 dict_ 作为类信息的源传递给它(使用declarativemeta时, cls.__dict__) . 理论上,这应该使自定义元类更容易修改作为声明性传入的状态。

  • [declarative]

    声明性现在直接接受mixin类,作为一种在所有子类上提供公共功能和基于列的元素的方法,以及一种传播固定集合的方法。 __table_args__ 或 __mapper_args__ 子类。用于自定义组合 __table_args__/__mapper_args__ 从继承的mixin到本地,现在可以使用描述符。新的细节都在声明性文档中。感谢克里斯威瑟斯忍受了我在这件事上的斗争。

    References: #1707

  • [declarative]

    这个 __mapper_args__ dict在传播到子类时被复制,并直接从类中去掉。 __dict__ 以避免来自父级的任何传播。映射器继承已从父映射器传播所需的内容。

    References: #1393

  • [declarative]

    当单个表子类指定基类上已存在的列时引发异常。

    References: #1732

  • [sybase]

    为Sybase实现了一个初步的工作方言,并为pythonSybase和pyodbc实现了子实现。处理表创建/删除和基本的往返功能。还不包括对unicode/特殊表达式等的反射或全面支持。

  • [documentation]

    文档中的主要清理工作是将类、函数和方法名称链接到API文档中。

    References: #1700

0.6beta1

Released: Wed Feb 03 2010

orm

  • [orm]

    对query.update()和query.delete()的更改:
    • query.update()上的“expire”选项已重命名为“fetch”,从而与query.delete()的选项匹配。expire'已弃用,并发出警告。

    • query.update()和query.delete()都默认为同步策略的“evaluate”。

    • update()和delete()的“同步”策略在失败时引发错误。“fetch”没有隐式回退。评估的失败是基于标准的结构,所以成功/失败是基于代码结构的确定性。

  • [orm]

    多对一关系的增强:
    • 现在,许多对一的关系在少数情况下会解雇一个拉西洛人,包括在大多数情况下,当一个新的拉西洛人被替换时,他们将得不到“旧”的价值。

    • 与联接表子类的多对一关系现在使用get()进行简单加载(称为“use_get”条件),即relevant->sub(base),而无需根据基表重新定义primaryjoin条件。

    • 使用声明性列指定外键,即foreign key(myrelatedclass.id)不会破坏发生的“use-get”条件。

    • relation()、chengload()和chengload_all()现在具有一个名为“innerjoin”的选项。指定 TrueFalse 控制一个热切连接是构造为内部连接还是外部连接。默认是 False 一如既往。映射器选项将覆盖关系()上指定的任何设置。通常应为多对一、不可为空的外键关系设置,以允许改进联接性能。

    • 当存在限制/偏移量时,如果主查询包装在子查询中,则热切加载的行为现在成为例外,因为所有热切加载都是多对一联接。在这些情况下,由于多对一联接不会向结果中添加行,因此在不增加子查询额外开销的情况下,热切联接直接针对父表以及限制/偏移量。

    References: #1186, #1492, #1544

  • [orm]

    session.merge()的增强/更改:

  • [orm]

    session.merge()上的“don_load=true”标志已被弃用,现在是“load=false”。

  • [orm]

    session.merge()是性能优化的,与0.5相比,使用“load=false”模式一半的调用计数,在“load=true”模式的集合中,使用的SQL查询明显更少。

  • [orm]

    如果给定的实例与已经存在的实例相同,则merge()不会发出不必要的属性合并。

  • [orm]

    merge()现在还合并了与给定状态相关联的“选项”,即那些通过query.options()传递的选项,这些选项与实例一起传递,例如用于急切加载或lazyily加载各种属性的选项。这对于构建高度集成的缓存方案至关重要。与0.5相比,这是一个微妙的行为变化。

  • [orm]

    修复了有关实例状态上存在的“加载程序路径”的序列化的错误,在将merge()的用法与序列化状态和应保留的关联选项结合使用时,这也是必需的。

  • [orm]

    全新的merge()将在如何将烧杯与sqlacalchemy集成的新的综合示例中展示。见下文“示例”注释中的注释。

  • [orm]

    现在可以在联接的表继承对象上更改主键值,并且在执行刷新时将考虑更新级联。使用sqlite或mysql/myisam时,在mapper()上将新的“被动更新”标志设置为false。

    References: #1362

  • [orm]

    flush()现在检测到一个主键列是何时被另一个主键的on-update级联操作更新的,然后可以找到该行以便对新pk值进行后续更新。当存在一个relation()来建立关系以及被动的_updates=true时,就会发生这种情况。

    References: #1671

  • [orm]

    “保存更新”层叠现在将层叠挂起的 远离的 在add()操作期间,从标量或集合属性到新会话的值。这样,flush()操作还将删除或修改那些断开连接的项的行。

  • [orm]

    使用带有“secondary”表的“dynamic”加载程序现在生成一个查询,其中“secondary”表是 not 别名。这允许在relation()的“orderu by”属性中使用辅助表对象,也允许在针对动态关系的筛选条件中使用它。

    References: #1531

  • [orm]

    当预先加载或延迟加载为行定位多个有效值时,带有useList=false的relation()将发出警告。这可能是由于primaryjoin/secondary联接条件不适合于渴望左外部联接或其他条件。

    References: #1643

  • [orm]

    当同义词()与map_column=true一起使用时,如果在发送给具有相同keyname的mapper的属性字典中单独存在ColumnProperty(延迟或其他),则会进行显式检查。不会静默替换现有属性(以及该属性上可能的选项),而是引发错误。

    References: #1633

  • [orm]

    “动态”加载程序在构建时设置其查询条件,以便从非克隆访问器(如“statement”)返回实际查询。

  • [orm]

    迭代query()时返回的“命名元组”对象现在是可pickle的。

  • [orm]

    现在,映射到select()构造要求您清楚地使用别名()。这样可以消除对以下问题的混淆:

    References: #1542

  • [orm]

    query.join()已被改写,以提供更一致的行为和更大的灵活性(包括)

    References: #1537

  • [orm]

    query.select_from()接受多个子句以在FROM子句中生成多个逗号分隔的条目。从多个homed join()子句中选择时很有用。

  • [orm]

    select_From()还接受映射类、别名()构造和映射器作为参数。尤其是在从多个已联接的表类查询时,这有助于确保呈现完整的联接。

  • [orm]

    query.get()可用于到外部联接的映射,其中一个或多个主键值为“无”。

    References: #1135

  • [orm]

    query.from_self(),query.union(),其他执行“select*from(select…)”嵌套类型的操作将更好地将子查询中的列表达式转换为外部查询的columns子句。这可能与0.5向后不兼容,因为这可能会中断使用未应用标签的文本表达式(即文本(“foo”)等)的查询。

    References: #1568

  • [orm]

    关系primaryjoin和secondaryjoin现在检查它们是否是列表达式,而不仅仅是子句元素。这将禁止直接将表达式放在那里。

    References: #1622

  • [orm]

    expression.null() 完全理解为与query.filter()、filter_by()等中的对象/集合引用属性进行比较时没有相同的方式。

    References: #1415

  • [orm]

    添加了“make_transient()”helper函数,该函数将持久/分离的实例转换为临时实例(即删除实例_键并从任何会话中删除)。

    References: #1052

  • [orm]

    mapper()上的allow_null_pks标志已被弃用,默认情况下该功能处于“打开”状态。这意味着对于任何主键列都具有非空值的行将被视为标识。这种情况的需要通常只在映射到外部联接时发生。

    References: #1339

  • [orm]

    “backref”的机制已经完全合并到更细粒度的“back-populates”系统中,并且完全发生在relationproperty的“generate”backref()方法中。这使得RelationProperty的初始化过程更简单,并允许更容易地将设置(例如从RelationProperty的子类)传播到反向引用中。内部backref()已消失,backref()返回relationproperty可以理解的纯元组。

  • [orm]

    mapper()上的版本“id_col”功能在与不充分支持“rowcount”的方言一起使用时会发出警告。

    References: #1569

  • [orm]

    向查询添加了“execution_options()”,以便可以将选项传递给结果语句。目前只有select语句有这些选项,唯一使用的选项是“stream_results”,唯一知道“stream_results”的方言是psycopg2。

  • [orm]

    query.yield_per()将自动设置“stream_results”语句选项。

  • [orm]

    已弃用或已删除:
    • 已弃用mapper()上的“allow_null_pks”标志。它现在什么也不做,而且在所有情况下设置都是“开”的。

    • 已删除sessionmaker()和其他服务器上的“transactional”标志。使用“autocommit=true”指示“transactional=false”。

    • 已删除mapper()上的“多态提取”参数。可以使用“with_多态性”选项控制加载。

    • 已删除mapper()上的“select_table”参数。对于此功能,请使用“with_多态性=”“*”,<some selectable>)。

    • 同义词()上的“proxy”参数已删除。由于“代理生成”行为现在是自动的,因此此标志在整个0.5过程中都不起作用。

    • 将单个元素列表传递给chengload()、chengload_all(),它包含了_eager()、lazyload()、defer()和undefer(),而不是多个位置 * 参数已弃用。

    • 将单个元素列表传递给query.order_by()、query.group_by()、query.join()或query.outerjoin(),而不是多个位置 * 参数已弃用。

    • 已删除query.iterate_instances()。使用query.instances()。

    • query.query_from_parent()被删除。使用sqlAlchemy.orm.with_parent()函数生成“parent”子句,或者使用_parent()查询。

    • query.from_self()已删除,请改用query.from_self()。

    • composite()的“comparator”参数被删除。使用“比较器工厂”。

    • RelationProperty。_get_join()已删除。

    • 会话上的“echo-uow”标志被删除。使用“sqlAlchemy.orm.UnitOfWork”名称登录。

    • session.clear()已删除。使用session.expunge_all()。

    • session.save()、session.update()、session.save_或_update()将被删除。使用session.add()和session.add_all()。

    • session.flush()上的“objects”标志仍然不推荐使用。

    • session.merge()中的“dont_load=true”标志已被弃用,取而代之的是“load=false”。

    • ScopedSession.mapper仍然不推荐使用。请参阅https://www.sqlalchemy.org/trac/wiki/UsageRecipes/SessionAwareMapper上的用法食谱

    • 将instanceState(内部sqlAlchemy状态对象)传递给attributes.init_collection()或attributes.get_history()已弃用。这些函数是公共API,通常需要一个常规的映射对象实例。

    • 声明性_base()的'engine'参数已移除。使用“bind”关键字参数。

sql

  • [sql]

    select()和text()以及select().autocommit()上的“autocommit”标志已被弃用-现在调用这些构造中的任何一个上的.execution_选项(autocommit=true),也可以直接在connection和orm.query上使用。

  • [sql]

    现在,列上的autoincrement标志指示应该链接到cursor.lastrowid的列(如果使用该方法)。有关详细信息,请参阅API文档。

  • [sql]

    ExecuteMany()现在要求所有绑定参数集都要求存在第一个绑定参数集中存在的所有键。insert/update语句的结构和行为在很大程度上由第一个参数集决定,包括哪些默认值将被触发,并对其余所有参数执行最小的猜测,以使性能不受影响。由于这个原因,默认值将在没有参数的情况下悄悄地“失败”,因此现在可以防范这种情况。

    References: #1566

  • [sql]

    返回()支持是insert()、update()、delete()的本机支持。PostgreSQL、Firebird、MSSQL和Oracle有不同级别的功能实现。返回()可以用列表达式显式调用,然后在结果集中返回列表达式,通常通过fetchone()或first()。

    insert()构造还将使用隐式返回来获取新生成的主键值,前提是正在使用的数据库版本支持它(执行版本号检查)。如果没有指定最终用户返回(),则会发生这种情况。

  • [sql]

    union()、intersect(),except()和其他“compound”类型的语句具有更一致的行为w.r.t.括号化。嵌入在另一个元素中的每个复合元素现在都将使用括号进行分组-以前,列表中的第一个复合元素不会分组,因为SQLite不希望语句以括号开头。但是,PostgreSQL特别具有关于intersect的优先规则,并且括号同样适用于所有子元素更为一致。现在,sqlite的解决方法也是pg以前的解决方法——当嵌套复合元素时,第一个元素通常需要“.alias().select()”调用它以将其包装在子查询中。

    References: #1665

  • [sql]

    insert()和update()构造现在可以使用与列键匹配的名称嵌入bindparam()对象。这些绑定参数将绕过到生成的SQL的values或set子句中显示的那些键的常规路由。

    References: #1579

  • [sql]

    binary类型现在以python字符串(或python 3中的“bytes”类型)返回数据,而不是内置的“buffer”类型。这允许二进制数据的对称往返。

    References: #1524

  • [sql]

    添加了一个tuple_()结构,允许将表达式集与另一个集进行比较,通常使用in与复合主键或类似项进行比较。还接受具有多列的In。“scalar select can only one column”(标量选择只能有一列)错误消息已删除-将依赖数据库报告列不匹配的问题。

  • [sql]

    接受上下文的用户定义的“default”和“onupdate”可调用文件现在应该调用“context.current_parameters”来获取当前正在处理的绑定参数的字典。此dict以相同的方式可用,而不考虑单个execute或executemany样式的语句执行。

  • [sql]

    多部分模式名称,即带有点(如“dbo.master”)的模式名称,现在呈现在select()标签中,并带有点的下划线,即“dbo_master_table_column”。这是一个“友好”的标签,在结果集中表现得更好。

    References: #1428

  • [sql]

    删除了select()标签名与表中的列名匹配的不必要的“counter”行为,即为“id”生成“table name_id”,而不是“table name_id_1”,以避免命名冲突,当表中实际有一个名为“table name_id”的列时-这是因为标记逻辑始终应用于所有列,因此命名冲突永远不会发生。

  • [sql]

    调用expr.in_([]),即使用空列表,在发出通常的“expr!”之前会发出警告。=expr“条款。“EXPR!=expr“可能非常昂贵,如果列表为空,用户最好不要在_u()中发出,而是简单地不查询,或者根据更复杂的情况修改标准。

    References: #1628

  • [sql]

    在select()/text()中添加了“execution_options()”,它设置了连接的默认选项。参见“发动机”中的注释。

  • [sql]

    已弃用或已删除:
    • select()上的“scalar”标志被删除,请使用select.as_scalar()。

    • bindparam()上的“shortname”属性被删除。

    • postgres返回,insert()、update()、delete()上的firebird返回标志被弃用,请使用新的返回()方法。

    • join上的fold_equivalents标志已弃用(将保留到实现为止)

    References: #1131

schema

  • [schema]

    这个 __contains__() 方法 MetaData 现在接受字符串或 Table 对象作为参数。如果给出 Table ,参数转换为 table.key 第一,即“ [架构名称。] <表名>

    References: #1541

  • [schema]

    已删除不推荐使用的metadata.connect()和threadLocalMetadata.connect()-发送“bind”属性以绑定元数据。

  • [schema]

    已弃用元数据。已删除table_iterator()方法(使用已排序的_tables)

  • [schema]

    已弃用passivedefault-use defaultclause。

  • [schema]

    “metadata”参数从defaultgenerator和子类中移除,但仍在sequence中本地存在,sequence是DDL中的独立构造。

  • [schema]

    已从索引和约束对象中删除公共可变性:

    • foreignkeyconstraint.append_元素()

    • index.append_列()

    • 唯一约束。追加列()

    • primarykeyconstraint.add()。

    • PrimaryKeyConstraint.Remove()。

    这些应该以声明的方式构造(即在一个构造中)。

  • [schema]

    sequence上的“start”和“increment”属性现在在Oracle和PostgreSQL上默认生成“start with”和“increment by”。Firebird现在不支持这些关键字。

    References: #1545

  • [schema]

    uniqueconstraint、index、primarykeyconstraint都接受列名称列表或列对象作为参数。

  • [schema]

    其他删除的内容:
    • table.key(不知道这是为了什么)

    • table.primary_key不可赋值-使用table.append_约束(primary key constraint(…))

    • column.bind(通过column.table.bind获取)

    • column.metadata(通过column.table.metadata获取)

    • column.sequence(使用column.default)

    • foreignkey(约束=某些父级)(现在是私有约束)

  • [schema]

    在foreignkey上使用alter标志现在是可以使用ddl()事件系统手工构造的操作的快捷方式选项。此重构的一个副作用是使用“alter=true”的ForeignKeyConstraint对象将 not 在sqlite上发出,它不支持外键的alter。

  • [schema]

    foreignkey和foreignkeyconstraint对象现在可以正确地复制()它们的所有公共关键字参数。

    References: #1605

postgresql

  • [postgresql]

    新方言:pg8000、zxjdbc和pypostgresql。

  • [postgresql]

    “postgres”方言现在被命名为“postgresql”!连接字符串如下:

    postgresql://scott:tiger@localhost/test postgresql+pg8000://scott:tiger@localhost/test

    “postgres”名称保持向后兼容性,方法如下:

    • 有一个“postgres.py”虚拟方言,允许旧的URL工作,即postgres://scott:tiger@localhost/test

    • “postgres”名称可以从旧的“databases”模块中导入,即“from sqlachemy.databases import postgres”和“dialogens”,“from sqlachemy.dialogens.postgres import base as pg”,将发送一个贬义警告。

    • 特殊的表达式参数现在被命名为“postgresql-rewing”和“postgresql-where”,但是旧的“postgres-rewing”和“postgres-where”名称仍然使用贬义警告。

  • [postgresql]

    “postgresql-where”现在接受SQL表达式,这些表达式还可以包含文字,这些文字将根据需要引用。

  • [postgresql]

    psycopg2方言现在在所有新连接上都使用psycopg2的“unicode扩展”,这允许所有字符串/文本等类型跳过将处理字节串发布到unicode的需要(由于其容量很大,这是一个昂贵的步骤)。其他本机返回Unicode的方言(pg8000、zxjdbc)也跳过Unicode后处理。

  • [postgresql]

    添加了新的枚举类型,该类型作为架构级构造存在,并扩展了通用枚举类型。自动将自身与表及其父元数据关联,以便根据需要发出适当的创建类型/删除类型命令,支持Unicode标签,支持反射。

    References: #1511

  • [postgresql]

    interval支持与pg接受的参数对应的可选“precision”参数。

  • [postgresql]

    使用新的dialect.initialize()功能设置与版本相关的行为。

  • [postgresql]

    更好地支持表/列名称中的%signs;但是psycopg2不能处理%(foobar)s的绑定参数名称,而sqla不希望仅仅为了处理不存在的用例而增加开销。

    References: #1279

  • [postgresql]

    将空值插入主键+外键列将允许引发“非空约束”错误,而不是尝试执行不存在的“col_id_seq”序列。

    References: #1516

  • [postgresql]

    autoincrement select语句,即那些从修改行的过程中选择的语句,现在可以使用服务器端光标模式(命名的光标不用于此类语句)。

  • [postgresql]

    PostgreSQL方言可以正确检测pg“devel”版本字符串,即“8.5devel”

    References: #1636

  • [postgresql]

    psycopg2现在尊重语句选项“stream_results”。此选项覆盖连接设置“服务器端光标”。如果为true,则该语句将使用服务器端游标。如果为false,则不会使用它们,即使连接上的“服务器端光标”为true。

    References: #1619

mysql

  • [mysql]

    新方言:oursql,一种新的本地方言,mysql connector/python,mysqldb的本地python端口,当然还有jython上的zxjdbc。

  • [mysql]

    varchar/nvarchar在没有长度的情况下不会呈现,在传递到mysql之前会引发一个错误。不会影响强制转换,因为在mysql强制转换中不允许使用varchar,在这些情况下,方言将呈现char/nchar。

  • [mysql]

    所有的检测函数现在在dialect.initialize()下运行一次。

  • [mysql]

    更好地支持表/列名称中的%signs;当使用executemany()时,mysqldb无法处理SQL中的%signs,并且sqla不希望只为处理一个不存在的用例而增加开销。

    References: #1279

  • [mysql]

    binary和msbinary类型现在在所有情况下都生成“binary”。省略“length”参数将生成没有长度的“binary”。使用BLOB生成一个无长度的二进制列。

  • [mysql]

    msenum/enum的“quoting='quoted'”参数已弃用。最好依靠自动报价。

  • [mysql]

    如果给定的labelname是unicode对象,那么enum现在将子类化新的通用枚举类型,并隐式处理unicode值。

  • [mysql]

    如果“nullable=false”未传递给column(),并且不存在默认值,则timestamp类型的列现在默认为空。这现在与所有其他类型一致,并且在时间戳的情况下,由于MySQL对时间戳列默认为空的“切换”,显式地呈现“空”。

    References: #1539

sqlite

  • [sqlite]

    日期、时间和日期时间类型现在可以采用可选的存储格式和regexp参数。存储格式可用于使用自定义字符串格式存储这些类型。regexp允许使用自定义正则表达式来匹配数据库中的字符串值。

  • [sqlite]

    时间和日期时间类型现在默认使用更严格的正则表达式来匹配数据库中的字符串。如果要使用以旧格式存储的数据,请使用regexp参数。

  • [sqlite]

    __legacy_microseconds__ 不再支持SQLite时间和日期时间类型。您应该改为使用存储格式参数。

  • [sqlite]

    日期、时间和日期时间类型现在接受的绑定参数更严格:日期类型只接受日期对象(和日期时间对象,因为它们继承自日期),时间只接受时间对象,日期时间只接受日期和日期时间对象。

  • [sqlite]

    table()支持关键字参数“sqlite_autoincrement”,它在生成ddl时将sqlite关键字“autoincrement”应用于单整数主键列。将阻止生成单独的主键约束。

    References: #1016

mssql

  • [mssql]

    现在,MSSQL+PYODBC+Freetds在大多数情况下都可以工作,除了二进制数据和Unicode模式标识符可能有例外。

  • [mssql]

    删除“has_window_funcs”标志。限制/偏移量的使用将一如既往地使用行号,如果在旧版本的SQL Server上,操作将失败。除了SQL Server引发的错误而不是方言之外,行为完全相同,并且不需要设置任何标志来启用它。

  • [mssql]

    将删除“自动插入标识”标志。当INSERT语句重写已知有序列的列时,此功能始终生效。就像“has-window-funcs”一样,如果底层驱动程序不支持这个操作,那么在任何情况下都不能执行这个操作,因此没有必要使用标志。

  • [mssql]

    使用新的dialect.initialize()功能设置与版本相关的行为。

  • [mssql]

    删除了对不再使用的序列的引用。MSSQL中的隐式标识与任何其他方言中的隐式序列工作相同。显式序列通过使用“default=sequence()”启用。有关详细信息,请参阅MSSQL方言文档。

oracle

  • [oracle]

    单元测试100%通过了cx_Oracle!

  • [oracle]

    支持cx-oracle的“本机Unicode”模式,不需要设置nls-lang。使用最新的5.0.2或更高版本的cx_Oracle。

  • [oracle]

    将向基本类型添加一个nclob类型。

  • [oracle]

    使用ansi=false不会泄漏到从也使用join/outerjoin的子查询中选择的语句的from/where子句中。

  • [oracle]

    在方言中添加了本机间隔类型。由于缺乏对cx_Oracle每年到每月的支持,因此目前仅支持从日到秒的间隔类型。

    References: #1467

  • [oracle]

    char类型的使用导致cx_oracle的固定char dbapi类型绑定到语句。

  • [oracle]

    甲骨文方言现在的特点是数字,它的作用和甲骨文的数字类型差不多。它是表反射返回的主要数字类型,并根据精度/小数位数参数尝试返回decimal()/float/int。

    References: #885

  • [oracle]

    func.char_length是长度的通用函数

  • [oracle]

    foreignkey()包含on update=<value>将发出警告,而不是在Oracle不支持的更新级联上发出。

  • [oracle]

    rowproxy()的keys()方法现在返回结果列名称 归一化 是不区分大小写的sqlAlchemy名称。这意味着对于不区分大小写的名称,它们将是小写的,而DBAPI通常将它们作为大写名称返回。这允许row keys()与其他sqlAlchemy操作兼容。

  • [oracle]

    使用新的dialect.initialize()功能设置与版本相关的行为。

  • [oracle]

    在Oracle中使用types.biginteger将生成数字(19)

    References: #1125

  • [oracle]

    “区分大小写”功能将在反射期间检测全部小写的区分大小写的列名称,并将“quote=true”添加到生成的列中,以便保持正确的引用。

firebird

  • [firebird]

    rowproxy()的keys()方法现在返回结果列名称 归一化 是不区分大小写的sqlAlchemy名称。这意味着对于不区分大小写的名称,它们将是小写的,而DBAPI通常将它们作为大写名称返回。这允许row keys()与其他sqlAlchemy操作兼容。

  • [firebird]

    使用新的dialect.initialize()功能设置与版本相关的行为。

  • [firebird]

    “区分大小写”功能将在反射期间检测全部小写的区分大小写的列名称,并将“quote=true”添加到生成的列中,以便保持正确的引用。

misc

  • [major] [release]

    有关全套功能描述,请参阅https://docs.sqlalchemy.org/en/latest/changelog/migration_06.html。本文档正在进行中。

  • [major] [release]

    最新0.5及以下版本的所有错误修复和功能增强也包含在0.6中。

  • [major] [release]

    现在的目标平台包括python 2.4/2.5/2.6、python 3.1、jython2.5。

  • [engines]

    事务隔离级别可以用create_engine(…postgresql和sqlite上提供隔离级别“…”。

    References: #443

  • [engines]

    连接具有execution_options(),generative方法,它接受影响语句如何通过dbapi执行的关键字。当前支持“stream_results”,使psycopg2为该语句使用服务器端光标,以及“autocommit”,这是select()和text()中“autocommit”选项的新位置。select()和text()还具有.execution_options()和orm query()。

  • [engines]

    修正了入口点驱动方言的导入不依赖于愚蠢的tb_信息技巧来确定导入错误状态。

    References: #1630

  • [engines]

    向resultproxy添加了first()方法,返回第一行并立即关闭结果集。

  • [engines]

    rowproxy对象现在是可pickle的,即result.fetchone()、result.fetchall()等返回的对象。

  • [engines]

    rowproxy不再有close()方法,因为该行不再维护对父级的引用。改为对父resultproxy调用close(),或使用autoclose。

  • [engines]

    结果对proxy内部进行了大修,以大大减少获取列时的方法调用计数。在获取较大的结果集时,可以提供较大的速度改进(高达100%以上)。当获取没有应用类型级处理的列以及将结果用作元组(而不是用作字典)时,改进的幅度更大。非常感谢Elixir的Ga_tan de Menten带来的巨大进步!

    References: #1586

  • [engines]

    当有一个组合主键,“autoincrement”列不是表中的第一个主键列时,依赖“last inserted id”的后取来获取生成的序列值(即mysql、ms-sql)的数据库现在可以正常工作。

  • [engines]

    最后一个插入的_id()方法已重命名为描述符“inserted_primary_key”。

  • [engines]

    在create_engine()上设置echo=false,现在将日志级别设置为warn而不是notset。这样,即使启用了“sqlachemy.engine”的日志记录,也可以禁用特定引擎的日志记录。注意,“echo”的默认设置是 None .

    References: #1554

  • [engines]

    ConnectionProxy现在拥有所有事务生命周期事件的包装方法,包括begin()、rollback()、commit()begin_nested()、begin_prepared()、prepare()、release_savepoint()等。

  • [engines]

    连接池日志记录现在使用信息和调试日志级别进行日志记录。信息用于重要事件,如无效连接、所有获取/返回日志的调试。 echo_pool 可以是假、无、真或“调试”,方法与 echo 作品。

  • [engines]

    所有的pyodbc方言现在都支持额外的pyodbc特定的kw参数'ansi'、'unicodeu results'、'autocommit'。

    References: #1621

  • [engines]

    “threadlocal”引擎已经被重写和简化,现在支持保存点操作。

  • [engines]

    已弃用或已删除
    • result.last_inserted_ids()已弃用。使用result.inserted_primary_键

    • dialect.get_default_schema_name(connection)现在通过dialect.default_schema_name公开。

    • engine.transaction()和engine.run_callable()中的“connection”参数被删除-连接本身现在有了这些方法。四种方法都可以接受 * ARGS和 * *传递给给定可调用文件以及操作连接的Kwarg。

  • [reflection/inspection]

    表反射已经被扩展并概括为一个新的API,称为“sqlacalchemy.engine.reflection.inspector”。inspector对象提供了关于各种模式信息的细粒度信息,并且具有扩展空间,包括表名、列名、视图定义、序列、索引等。

  • [reflection/inspection]

    视图现在可以作为普通的表对象反射。使用同一个表构造函数,但要注意,“有效”的主键和外键约束不是反射结果的一部分;如果需要,必须显式指定这些约束。

  • [reflection/inspection]

    现有的autoload=true系统现在在下面使用inspector,这样每个方言就只需要返回关于表和其他对象的“原始”数据——inspector是将信息编译成表对象的唯一地方,从而最大限度地保持一致性。

  • [ddl]

    DDL系统得到了极大的扩展。ddl()类现在扩展了更通用的ddlElement(),它构成了许多新构造的基础:

    • 创建()

    • DROP表()

    • 附加约束()

    • DropConstraint()。

    • 创建索引()

    • 索引索引()

    • 创建序列()

    • 下降序列()

    这些支持“on”和“execute-at()”就像普通的ddl()一样。可以使用sqlachemy.ext.compiler扩展创建用户定义的ddlElement子类,并将其链接到编译器。

  • [ddl]

    传递给ddl()和ddlElement()的“on”可调用文件的签名修改如下:

    敌我识别

    ddlElement对象本身

    事件

    字符串事件名称。

    目标

    以前是“schema_item”,触发事件的表或元数据对象。

    连接

    用于操作的连接对象。

    * *千瓦

    关键字参数。对于创建/删除之前/之后的元数据,将为其发出创建/删除DDL的表对象列表作为kw参数“tables”传递。这对于依赖于特定表的存在的元数据级DDL是必需的。

    DDL的“schema_item”属性已重命名为

    “目标”。

  • [dialect] [refactor]

    方言模块现在分为数据库方言和DBAPI实现。连接URL现在首选使用方言+驱动程序:/…,即“mysql+mysqldb://scott:tiger@localhost/test”。有关示例,请参见0.6文档。

  • [dialect] [refactor]

    外部方言的设置工具入口点现在称为“sqlacalchemy.dialogens”。

  • [dialect] [refactor]

    “owner”关键字参数将从表中删除。使用“schema”表示要在表名前面加上的任何名称空间。

  • [dialect] [refactor]

    服务器版本信息变为静态属性。

  • [dialect] [refactor]

    方言在初始连接时接收initialize()事件以确定连接属性。

  • [dialect] [refactor]

    方言接受访问池活动有机会建立池侦听器。

  • [dialect] [refactor]

    缓存的类型引擎类是按方言类而不是按方言缓存的。

  • [dialect] [refactor]

    新的userDefinedType应用作新类型的基类,它保留get_col_spec()的0.5行为。

  • [dialect] [refactor]

    所有类型类的result_processor()方法现在接受第二个参数“coltype”,即cursor.description中的dbapi类型参数。这个参数可以帮助一些类型决定最有效的结果值处理。

  • [dialect] [refactor]

    已弃用方言。请移除_params()。

  • [dialect] [refactor]

    dialect.get_rowcount()已重命名为描述符“rowcount”,并直接调用cursor.rowcount。需要为某些调用硬连接行计数的方言应重写该方法以提供不同的行为。

  • [dialect] [refactor]

    已删除DefaultRunner和子类。此对象的作业已被简化并移动到ExecutionContext中。支持序列的方言应添加 fire_sequence() 方法的执行上下文实现。

    References: #1566

  • [dialect] [refactor]

    编译器生成的函数和运算符现在使用(几乎)形式为“visit_<opname>”和“visit_<funcname>fn”的常规调度函数来提供客户处理。这就取代了使用直接的访问者方法复制编译器子类中的“函数”和“运算符”字典的需要,并且还允许编译器子类在传入完整的函数或二进制表达式对象时完全控制呈现。

  • [types]

    方言中的类型结构已经彻底改革。方言现在只将公开可用的类型定义为大写名称,并使用下划线标识符(即私有)定义内部实现类型。用SQL和DDL表示类型的系统已移到编译器系统中。这样一来,大多数方言中的类型对象就少得多。关于这个方言作者体系结构的详细文档位于lib/sqlacalchemy/dialogens/type_migration_guidelines.txt中。

  • [types]

    类型不再对默认参数进行任何猜测。特别是,除非指定,否则numeric、float、numeric、float、decimal不会生成任何长度或比例。

  • [types]

    binary被重命名为types.largebinary,它只生成blob、bytea或类似的“long binary”类型。添加了新的基本binary和varbinary类型,以不可知的方式访问这些特定于mysql/ms-sql的类型。

    References: #1664

  • [types]

    如果方言检测到DBAPI以本机方式返回python unicode对象,则字符串/text/unicode类型现在跳过对每个结果列值的unicode()检查。此检查在第一次连接时使用“select cast'some text'as varchar(10)”或等效项发出,然后检查返回的对象是否为python unicode。这使得本机Unicode DBAPIS的性能有了很大提高,包括pysqlite/sqlite3、psycopg2和pg8000。

  • [types]

    大多数类型的结果处理器都被检查了可能的速度改进。具体地说,以下通用类型已被优化,从而导致不同的速度改进:unicode、pickletype、interval、typecorator、binary。此外,还改进了以下DBAPI特定的实现:SQLite上的时间、日期和日期时间、PostgreSQL上的数组、MySQL上的时间、MySQL上的数字(as_decimal=false)、OurSQL和PypostgreSQL上的数字(as_decimal=false)、CX_Oracle上的日期时间和基于CX_Oracle的LOB类型。

  • [types]

    类型反射现在返回types.py中的准确大写类型,或者如果类型不是标准的SQL类型,则返回方言本身中的大写类型。这意味着反射现在返回关于反射类型的更准确的信息。

  • [types]

    添加了新的枚举泛型类型。枚举是一个模式感知对象,用于支持需要特定DDL才能使用枚举或等效项的数据库;对于pg,它处理 CREATE TYPE 在没有本机枚举支持的其他数据库上,将通过生成varchar+内联检查约束来强制枚举。

    References: #1109, #1511

  • [types]

    间隔类型包括一个“本机”标志,该标志控制是否选择本机间隔类型(PostgreSQL+Oracle)(如果可用)。day-pu-precision和second-pu-precision参数也会被添加,它们会适当地传播到这些本机类型。有关。

    References: #1467

  • [types]

    布尔类型在没有本机布尔支持的后端上使用时,将生成一个检查约束“col in(0,1)”以及基于in t/smallint的列类型。如果需要,可以使用create_constraint=false关闭此选项。注意,mysql没有本机布尔值 or 检查约束支持,使此功能在该平台上不可用。

    References: #1589

  • [types]

    当mutable=true时,pickleType现在使用==来比较值,除非为该类型指定了带有比较函数的“comparator”参数。如果不重写uu eq_uuuuu()或不提供比较函数,则将基于标识(这会破坏mutable=true的目的)比较被pickle的对象。

  • [types]

    numeric和float的默认“precision”和“scale”参数已被删除,现在默认为none。除非提供了这些值,否则默认情况下,numeric和float将不带数值参数呈现。

  • [types]

    abstractType.get_search_list()已删除-不再需要用于的游戏。

  • [types]

    添加了一个通用的biginger类型,编译为bigint或number(19)。

    References: #1125

  • [types]

    已经对sqlsoup进行了大修,以显式支持0.5样式的会话,使用autocommit=false、autoflush=true。现在,sqlsoop的默认行为要求使用commit()和rollback(),这两个函数已经添加到其接口中。显式会话或作用域会话可以传递给构造函数,从而允许重写这些参数。

  • [types]

    sqlsoop db.<sometable>.update()和delete()现在分别调用query(cls.update()和delete()。

  • [types]

    现在,sqlsoop有execute()和connection(),它们调用这些名称的会话方法,以确保绑定与sqlsoop对象的绑定有关。

  • [types]

    sqlsoup对象不再具有“query”属性-它不需要用于sqlsoup的使用范式,它阻碍了实际命名为“query”的列。

  • [types]

    传递给关联代理的代理可调用工厂的签名现在是(lazy_collection、creator、value_attr、association_proxy),添加第四个参数,即父关联代理参数。允许对内置集合进行序列化和子类化。

    References: #1259

  • [types]

    关联代理现在有基本的比较器方法。any(),.has(),.contains(),=,!感谢斯科特·托伯格。

    References: #1372

Previous: 0.7换热器 Next: 0.5换热器