Release: 1.4.25 | Release Date: September 22, 2021

SQLAlchemy 1.4 Documentation

0.8换热器

0.8.7

Released: July 22, 2014

orm

  • [orm] [bug]

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

    References: #3055

  • [orm] [bug]

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

    References: #3047

sql

postgresql

  • [postgresql] [bug]

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

    References: #3053

  • [postgresql] [bug]

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

mysql

  • [mysql] [bug]

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

    References: #3101

  • [mysql] [bug]

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

    References: #3085

  • [mysql] [bug]

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

mssql

  • [mssql] [bug]

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

  • [mssql] [bug]

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

    References: #3091

misc

  • [bug] [declarative]

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

    References: #3062

  • [bug] [ext]

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

    References: #3051, #3093

  • [bug] [ext]

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

    References: #3051, #3093

0.8.6

Released: March 28, 2014

general

  • [general] [bug]

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

    References: #2986

orm

  • [orm] [bug]

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

    References: #3006

  • [orm] [bug]

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

    References: #2995

  • [orm] [bug]

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

  • [orm] [bug]

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

    References: #2975

sql

  • [sql] [bug]

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

    References: #2977

postgresql

  • [postgresql] [feature]

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

  • [postgresql] [bug]

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

    References: #3000

misc

  • [bug] [ext]

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

    References: #2997

0.8.5

Released: February 19, 2014

orm

  • [orm] [bug]

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

    References: #2951

  • [orm] [bug]

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

  • [orm] [bug]

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

    References: #2887

  • [orm] [bug]

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

    References: #2885

  • [orm] [bug]

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

    References: #2889

engine

  • [engine] [bug] [pool]

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

    References: #2880, #2964

sql

  • [sql] [bug]

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

    References: #2944

  • [sql] [bug]

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

    References: #2957

  • [sql] [bug]

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

    References: #2896

  • [sql] [bug]

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

    References: #2895

  • [sql] [enhancement]

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

postgresql

  • [postgresql] [bug]

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

    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的时候使用,所以索引和主键约束反射现在可以在这些版本上工作。

  • [postgresql] [bug]

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

    References: #2291

mysql

  • [mysql] [feature]

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

    References: #2941

  • [mysql] [bug]

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

    References: #2966

  • [mysql] [bug]

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

    References: #2933

  • [mysql] [bug]

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

sqlite

  • [sqlite] [bug]

    将唯一约束反射的背面丢失的更改恢复为0.8,其中 UniqueConstraint 如果列名称中包含保留关键字,则WITH SQLite将失败。拉请求由罗马波多利卡提供。

mssql

  • [mssql] [bug] [firebird]

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

  • [mssql] [bug] [pymssql]

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

firebird

  • [firebird] [bug]

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

    References: #2897

  • [firebird] [bug]

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

misc

  • [bug] [py3k]

    修复了py3k错误,其中缺少导入将导致“literal binary”模式在呈现绑定参数时无法导入“util.binary_type”。0.9处理方式不同。拉请求由Andreas Ze惰轮提供。

  • [bug] [declarative]

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

    References: #2888

0.8.4

Released: December 8, 2013

orm

  • [orm] [bug]

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

    References: #2818

engine

  • [engine] [bug]

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

    References: #2881

  • [engine] [bug] [pool]

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

    References: #2880

  • [engine] [bug] [pool]

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

    References: #2522

  • [engine] [bug]

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

    References: #2871

sql

postgresql

  • [postgresql] [bug]

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

    References: #2855

mssql

  • [mssql] [bug]

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

oracle

  • [oracle] [bug]

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

    References: #2864

  • [oracle] [bug]

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

    References: #2870

misc

  • [bug] [ext]

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

    References: #2869

0.8.3

Released: October 26, 2013

orm

  • [orm] [feature]

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

    References: #2836

  • [orm] [bug]

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

    References: #2813

  • [orm] [bug]

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

    References: #2818

  • [orm] [bug]

    从0.9开始的一个变化,它对用于多态继承加载的映射器层次结构的迭代进行排序,从而允许为多态查询生成的select语句具有确定性呈现,这反过来有助于缓存在SQL字符串本身上缓存的方案。

    References: #2779

  • [orm] [bug]

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

    References: #2794

  • [orm] [bug]

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

    References: #2786

  • [orm] [bug]

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

    References: #2778

  • [orm] [bug]

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

    References: #2773

orm declarative

  • [orm] [declarative] [feature]

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

examples

  • [examples] [feature]

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

  • [examples] [bug]

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

engine

  • [engine] [feature]

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

    References: #2821

  • [engine] [bug] [oracle]

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

    References: #2776

  • [engine] [bug] [pool]

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

    References: #2772

sql

  • [sql] [feature]

    向添加了新方法 insert() 建造 Insert.from_select() . 给定列列表和可选择的渲染 INSERT INTO (table) (columns) SELECT .. .

    References: #722

  • [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')

  • [sql] [bug]

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

    References: #2849

  • [sql] [bug]

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

    References: #2842

  • [sql] [bug]

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

    References: #2825

  • [sql] [bug]

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

    References: #2742

  • [sql] [bug]

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

    References: #2815

  • [sql] [bug]

    上的非工作“schema”参数 ForeignKey 已弃用;引发警告。删除0.9。

    References: #2831

  • [sql] [bug]

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

    References: #2811

  • [sql] [bug]

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

  • [sql] [bug] [postgresql]

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

    References: #2780

postgresql

  • [postgresql] [bug]

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

    References: #2844

  • [postgresql] [bug]

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

    References: #2742

  • [postgresql] [bug]

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

    References: #2819

mysql

  • [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/MariaDB外键 .

    References: #2721, #2839

  • [mysql] [bug]

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

    References: #2515

sqlite

  • [sqlite] [bug]

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

    References: #2781

oracle

  • [oracle] [bug]

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

    References: #2853

misc

  • [feature]

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

0.8.2

Released: July 3, 2013

orm

  • [orm] [feature]

    添加了新方法 Query.select_entity_from() 这将在0.9中取代 Query.select_from() . 在0.8中,这两个方法执行相同的函数,以便代码可以迁移以使用 Query.select_entity_from() 方法视情况而定。有关详细信息,请参阅0.9迁移指南。

    References: #2736

  • [orm] [bug]

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

    References: #2750

  • [orm] [bug]

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

    References: #2759

  • [orm] [bug]

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

    References: #2754

  • [orm] [bug]

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

    References: #2755

  • [orm] [bug] [ext]

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

    References: #2730

  • [orm] [bug]

    修正了由 #2682 其中的评估调用 Query.update()Query.delete() 会碰到不支持的 TrueFalse 由于使用了 IS .

    References: #2737

  • [orm] [bug]

    修正了由该票引起的0.7的回归,这使得在自引用的热切连接中对递归溢出的检查过于宽松,缺少子类配置了lazy=“joined”或“subquery”,并且负载是对基的“with_polymorphic”的特定情况。

    References: #2481

  • [orm] [bug]

    修正了从0.7开始的回归,其中ContextManager特性 Session.begin_nested() 当发生刷新错误时,将无法正确回滚事务,而不是在会话仍挂起回滚时引发自己的异常。

    References: #2718

orm declarative

  • [orm] [declarative] [feature]

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

    References: #2761

examples

  • [examples] [bug]

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

  • [examples] [bug]

    修复了dogpoill示例中的一个小错误,在该示例中,生成SQL缓存键的方式与对语句应用重复数据消除标签的方式不同 Query 通常是这样。

engine

  • [engine] [bug]

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

  • [engine] [bug] [sybase]

    修复了一个错误,在该错误中,例行程序检测到发送给 create_engine() 在某些情况下会失败,例如使用Sybase方言。

    References: #2732

sql

  • [sql] [feature]

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

    References: #2734, #2744

  • [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子句输入相关性。

    References: #2668, #2746

  • [sql] [bug]

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

    References: #2738

  • [sql] [bug] [reflection]

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

    References: #2728

  • [sql] [bug]

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

    References: #2726

  • [sql] [bug] [mssql]

    从此票证回归导致不支持的关键字“true”呈现,添加了逻辑以将其转换为SQL Server的1/0。

    References: #2682

postgresql

  • [postgresql] [feature]

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

  • [postgresql] [feature]

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

    References: #2072

  • [postgresql] [bug]

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

    References: #2740

  • [postgresql] [bug]

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

    References: #2766

  • [postgresql] [bug]

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

    References: #2767

  • [postgresql] [bug]

    修复了hstore类型以正确编码/解码Unicode。这始终是打开的,因为hstore是文本类型,并且在使用python 3时与psycopg2的行为匹配。由Dmitry Mugtasimov提供。

    References: #2735

mysql

  • [mysql] [feature]

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

    References: #2704

  • [mysql] [bug]

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

    References: #2768

  • [mysql] [bug]

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

    References: #2715

  • [mysql] [bug]

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

    References: #2721

  • [mysql] [bug]

    更新mysqlconnector方言,以根据异常中发送的明显字符串消息检查断开连接;根据mysqlconnector 1.0.9进行测试。

sqlite

mssql

  • [mssql] [bug]

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

    References: #2747

firebird

  • [firebird] [feature]

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

    References: #2763

  • [firebird] [bug]

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

    References: #2757

misc

  • [bug] [ext]

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

  • [requirements]

    The Python mock library is now required in order to run the unit test suite. While part of the standard library as of Python 3.3, previous Python installations will need to install this in order to run unit tests or to use the sqlalchemy.testing package for external dialects.

0.8.1

Released: April 27, 2013

orm

  • [orm] [feature]

    向查询添加了一个方便方法,该方法将查询转换为窗体的现有子查询。 EXISTS (SELECT 1 FROM ... WHERE ...) .

    References: #2673

  • [orm] [bug]

    修复到 sqlalchemy.ext.serializer 扩展,包括从pickler传递的“id”被转换成字符串以防止在py3k上解析字节,以及 relationship()orm.join() 构造现在已正确序列化。

    References: #2698

  • [orm] [bug]

    对query.join()的内部工作进行了显著改进,从而大大简化了有关如何连接的决策。新的测试用例现在已经通过了,比如从已经很复杂的一系列涉及继承的连接中间扩展的多个连接,等等。从深度嵌套的子查询结构连接仍然是复杂的,并不是没有警告,但是随着这些改进,边缘情况可能会被推到更远的边缘。

    References: #2714

  • [orm] [bug]

    为ORM映射对象的取消拾取过程添加了一个条件,这样,如果对象的引用在对象被pickle时丢失,我们不会错误地尝试设置“sa_instance_state”-修复非类型错误。

  • [orm] [bug]

    修复了多对多关系(uselist=false)的错误,如果标量属性设置为none,则删除关联行并引发错误。这是由于 #2229 .

    References: #2710

  • [orm] [bug]

    改进了在会话中创建强引用的实例管理行为;如果对象处于瞬态状态或移动到分离状态,则将不再创建内部引用循环-仅当对象附加到会话时创建强引用,并在对象被删除时删除。绷紧的这使得对象具有 __del__() method, even though this is not recommended, as relationships with backrefs produce cycles too. A warning has been added when a class with a `_ _ del_uu()`方法已映射。

    References: #2708

  • [orm] [bug]

    修复了ORM在刷新继承映射类(其中超类映射到非表对象,如自定义join()或select())时运行错误类型查询的错误,该类运行的查询假定层次结构映射到每个类的单个表。

    References: #2697

  • [orm] [bug]

    固定的 __repr__() 在映射器上的属性构造在对象初始化之前工作,以便使用最新的sphinx版本构建的sphinx可以读取它们。

orm declarative

  • [orm] [declarative] [bug]

    固定间接回归 has_inherited_table() ,因为它考虑了当前类' __table__ ,对它被调用时很敏感。这也是0.7的行为,但在0.7中,事情往往在类似事件中“解决” __mapper_args__() . has_inherited_table() 现在只考虑超类,因此应该返回关于当前类的相同答案,无论何时调用它(显然假定超类的状态)。

    References: #2656

examples

  • [examples] [bug]

    修复了缓存示例中一个长期存在的错误,在计算缓存键时不考虑限制/偏移参数值。已将_key_from_query()函数简化为直接从最终编译的语句开始工作,以便同时获得完整语句和完全处理的参数列表。

sql

  • [sql] [feature]

    放宽了对传递给table()的方言特定参数名称的检查;由于我们希望支持外部方言,并且还希望在未安装某个方言的情况下支持arg,因此现在它只检查arg的格式,而不是在sqlacalchemy.dialogens中查找该方言。

  • [sql] [bug] [mysql]

    完全实现了与真/假常量相关的IS和IS运算符。像这样的表达 col.is_(True) 现在将渲染 col IS true 在目标平台上,而不是将真/假常量转换为整数绑定参数。这允许 is_() 当给定真/假常量时,操作mysql的运算符。

    References: #2682

  • [sql] [bug]

    使用Apply_Labels()时,select()对象生成带标签列的方式的主要修复;此模式生成一个select,其中每个列都标记为in<table name>uumnname>,以删除多表选择的列名冲突。解决方法是,如果两个标签在与表名(即“foo.bar_id”和“foo_bar.id”)组合时发生冲突,则匿名别名将应用于其中一个副本。这允许ORM独立地处理这两列;以前,0.7在某些情况下会为“dupped”列自动发出第二个select,而在0.8中会发出不明确的列错误。应用于select()的.c.集合的“keys”也将被删除,因此对于指定使用labels的任何select()而言,“column being replaced”警告将不再发出,尽管dupe键将被赋予一个匿名标签,该标签通常不便于用户使用。

    References: #2702

  • [sql] [bug]

    修复了在连接对象关闭后,如果错误被引发,则断开连接错误检测将引发属性错误的错误。

    References: #2691

  • [sql] [bug]

    重新生成的内部异常引发,在重新引发之前发出rollback(),以便在进入rollback之前从sys.exc_info()保留堆栈跟踪。这样,当使用协程框架时就可以保留回溯,而协程框架可能在回滚函数返回之前切换了上下文。

    References: #2703

  • [sql] [bug] [postgresql]

    当在python 3上运行时,_binary base type现在通过bytes()可调用的值进行转换;特别是psycopg2 2.5和python 3.3现在似乎返回了“memoryview”类型,因此在返回之前将其转换为字节。

  • [sql] [bug]

    连接自动失效处理的改进。如果发生非断开连接错误,但在错误处理中导致延迟的断开连接错误(在MySQL中发生),则会检测到断开连接条件。连接现在也可以在处于无效状态时关闭,这意味着它将在下次使用时引发“关闭”,此外,即使错误处理例程中的自动回滚失败,无论条件是否为断开连接,“结果关闭”功能也将起作用。

    References: #2695

  • [sql] [bug]

    修正了dbapi为cursor.lastrowid返回“0”时不能与 ResultProxy.inserted_primary_key .

postgresql

  • [postgresql] [bug]

    使用psycopg2/libpq打开“disconnect”检查,以检查完整异常层次结构中的所有“disconnect”消息。具体来说,“意外关闭连接”消息现在至少在三种不同的异常类型中出现。尊敬的Eli Collins。

    References: #2712

  • [postgresql] [bug]

    PostgreSQL数组类型的运算符支持集合、生成器等的输入类型,即使未指定维度,也可以无条件地将给定的ITerable转换为集合。

    References: #2681

  • [postgresql] [bug]

    在PostgreSQL类型名称中添加了缺少的hstore类型,以便可以反映该类型。

    References: #2680

mysql

  • [mysql] [bug]

    修复支持最新的cymysql dbapi,由Hajime Nakagami提供。

  • [mysql] [bug]

    pymysql方言在python 3上的操作改进,包括一些重要的解码/字节步骤。由于驱动程序问题,blob类型仍然存在问题。本·特罗法特致意。

    References: #2663

  • [mysql] [bug]

    更新了regexp,以便在Google应用程序引擎v1.7.5及更高版本上正确提取错误代码。丹戒指。

mssql

  • [mssql] [bug]

    作为pyodbc+mssql所需的较长系列修复的一部分,在所有信息模式查询中,表名和模式名的绑定参数中都添加了一个到nvarchar(max)的转换,以避免将nvarchar与ntext进行比较的问题,在某些情况下,例如freetds(仅0.91?)以及正在传递的Unicode绑定参数。这个问题似乎是特定于SQL Server信息模式表的,对于那些首先不存在问题的情况,解决方法是无害的。

    References: #2355

  • [mssql] [bug]

    添加了对pymsql方言中其他“disconnect”消息的支持。尊敬的约翰·安德森。

  • [mssql] [bug]

    修复了关于“二进制”类型和pymsql的py3k错误。由Marc Abramowitz提供。

    References: #2683

0.8.0

Released: March 9, 2013

注解

从0.8.0开始,0.8.0b2中没有出现一些新的行为变化。它们出现在迁移文档中,如下所示:

orm

  • [orm] [feature]

    有意义的 QueryableAttribute.info 添加属性,该属性将代理到 .info 属性 Column 对象(如果直接存在),或 MapperProperty 否则。完整的行为被记录下来,并通过测试确保其保持稳定。

    References: #2675

  • [orm] [feature]

    可以设置/更改 relationship() 在已经构建之后进行构造。这不是一个正常使用的模式,但是为了演示,我们希望在教程中更改设置。

  • [orm] [feature]

    添加了新的助手函数 was_deleted() ,如果给定对象是 Session.delete() 操作。

    References: #2658

  • [orm] [feature]

    扩展了 运行时检查API 系统,以便检索与ORM或其扩展关联的所有Python描述符。这满足了能够检查所有 QueryableAttribute 除了扩展类型之外的描述符,例如 hybrid_propertyAssociationProxy . 见 Mapper.all_orm_descriptors .

  • [orm] [bug]

    改进了在映射器配置期间对现有backref名称冲突的检查;现在将测试超类和子类(除了当前映射器)上的名称冲突,因为这些冲突会破坏同样多的内容。这对于0.8是新的,但请参阅下面的0.7.11中也会触发的警告。

    References: #2674

  • [orm] [bug]

    改进了在检测到“backref循环”时发出的错误消息,即当属性事件触发两个其他属性之间的双向分配而没有结束时发出的错误消息。这种情况不仅发生在分配了错误类型的对象时,也可能发生在将属性错误配置为backref到现有backref对时。也在0.7.11.

    References: #2674

  • [orm] [bug]

    如果存在问题的属性不是基于列的纯属性,则在将MapperProperty分配给替换现有属性的映射器时会发出警告。关系属性的替换很少(曾经?)什么是有意的,通常是指映射器的错误配置。也在0.7.11.

    References: #2674

  • [orm] [bug]

    如果事件处理程序尝试在after_commit()处理程序中的会话上发出SQL,则会发出一条清晰的错误消息,其中没有正在进行的可行事务。

    References: #2662

  • [orm] [bug]

    在级联自然主键更新的过程中检测主键更改将成功,即使该键是复合的并且只有部分属性发生了更改。

    References: #2665

  • [orm] [bug]

    从会话中删除的对象将在提交事务后与该会话完全取消关联,即 object_session() 函数将返回“无”。

    References: #2658

  • [orm] [bug]

    修正了错误 Query.yield_per() 会错误地设置执行选项,从而破坏 Query.execution_options() 方法。由Ryan Kelly提供。

    References: #2661

  • [orm] [bug]

    修正了 between() 操作员,以便它与新的关系本地/远程系统正确工作。

    References: #1768

  • [orm] [bug]

    将挂起的对象视为“孤立对象”的考虑已被修改为与持久对象的行为更为匹配,即从 Session 一旦它从其任何启用孤儿的父代中脱离。以前,只有从所有启用孤立的父对象中取消关联后,才会删除挂起的对象。新旗帜 legacy_is_orphan 被添加到 mapper() 它重新建立了遗留行为。

    参见变更说明和示例案例 把“悬而未决”的对象当作“孤儿”的考虑变得更具侵略性。 有关此更改的详细讨论。

    References: #2655

  • [orm] [bug]

    修复了(很可能从未使用)“@collection.link”集合方法,该方法在每次集合与映射对象关联或取消关联时都会激发-装饰器未经测试或不起作用。decorator方法现在命名为 collection.linker() 尽管名称“link”保持向后兼容性。由Luca Wehrstedt提供。

    References: #2653

  • [orm] [bug]

    对生成自定义工具化集合的系统进行了一些修复,主要是@collection修饰符的使用将尊重 __mro__ 应用特定集合方法的子类版本的逻辑。以前,当对现有的检测类(如 MappedCollection 自定义方法是否可以正确解析。

    References: #2654

  • [orm] [bug]

    修复了如果任意数量的 sessionmaker 对象已创建。当取消引用时,由sessionmaker创建的匿名子类不会因为事件包中的剩余类级引用而被垃圾收集。这个问题也适用于任何将特殊子类与事件调度器结合使用的自定义系统。也在0.7.10。

    References: #2650

  • [orm] [bug]

    Query.merge_result() 现在可以从外部联接中加载实体可能 None 不会引发错误。也在0.7.10。

    References: #2640

  • [orm] [bug]

    修复上的“动态”加载程序 relationship() 包括,即使禁用自动刷新,backrefs也能正常工作,在同一对象发生多个添加/删除的情况下,历史事件更准确。

    References: #2637

  • [orm] [removed]

    使用 __instrumentation__ 与集合相关联的数据结构已被删除,因为这是一个复杂且未经测试的特性,与decorator方法相比,它本质上也是多余的。还对orm.collections模块进行了其他内部简化。

examples

  • [examples] [bug]

    修正了由于 #2614 .

sql

  • [sql] [feature]

    向添加了新参数 Enum 及其基础 SchemaType inherit_schema .当设置为 True ,类型将设置其 schema 的属性 Table 与之关联的。这也发生在 Table.tometadata() 操作; SchemaType 在所有情况下,当 Table.tometadata() 发生,如果 inherit_schema=True 类型将采用传递给方法的新架构名称。这个 schema 与PostgreSQL后端一起使用时很重要,因为类型会导致 CREATE TYPE 语句。

    References: #2657

  • [sql] [feature]

    Index 除了直列之外,现在还支持任意SQL表达式和/或函数。常用的修饰符包括using somecolumn.desc() 对于降序索引和 func.lower(somecolumn) 对于不区分大小写的索引,取决于目标后端的功能。

    References: #695

  • [sql] [bug]

    选择相关的行为已经得到了改进,使得 Select.correlate()Select.correlate_except() 方法及其ORM类似物仍将保留“自相关”行为,因为只有当输出为合法的SQL时,才会修改FROM子句;也就是说,如果相关的SELECT未在WHERE、COLUMNS或HAVING子句内的封闭select上下文中使用,则FROM子句保持不变。这两种方法现在只指定默认的“自动相关”条件,而不是列表中的绝对值。

    References: #2668

  • [sql] [bug]

    修复了一个关于列注释的错误,特别是可能影响新的 remote()local() 注释函数,当在后续表达式中使用列时,注释可能会丢失。

    References: #1768, #2660

  • [sql] [bug]

    这个 ColumnOperators.in_() 运算符现在将强制 Nonenull() .

    References: #2496

  • [sql] [bug]

    固定错误在哪里 Table.tometadata() 如果失败了 Column 该列既有一个外键,也有一个可选的“.key”名称。也在0.7.10。

    References: #2643

  • [sql] [bug]

    insert().return()如果试图在不支持返回的方言上编译,则会引发信息性的compilerRor。

    References: #2629

  • [sql] [bug]

    修改了编译器用来标识需要传递的插入/更新绑定参数的“必需”符号,以便在编写自定义绑定处理代码时更容易识别。

    References: #2648

schema

postgresql

  • [postgresql] [feature]

    补充 Comparator.any()Comparator.all() 方法以及独立的表达式构造。非常感谢Audrius Ka_Ukauskas的出色工作。

  • [postgresql] [bug]

    固定错误 array()insert() 构造将产生与中的参数问题有关的错误 self_group() 方法。

mysql

  • [mysql] [feature]

    增加了cymysql的新方言,由Hajime Nakagami提供。

  • [mysql] [feature]

    GAE方言现在接受URL中的用户名/密码参数,由Owen Nelson提供。

  • [mysql] [bug] [gae]

    将条件导入添加到 gaerdbms 尝试导入rdbms-apiproxy与rdbms-googleapi以在开发和生产平台上工作的方言。现在也要向 instance 属性。尊敬的肖恩·林奇。也在0.7.10。

    References: #2649

  • [mysql] [bug]

    如果不能从异常抛出中提取错误代码,那么gae dialect在none-match上不会失败;由Owen Nelson提供。

mssql

  • [mssql] [feature]

    补充 mssql_includemssql_clustered 选项到 Index 渲染 INCLUDECLUSTERED 关键词。Derek Harland提供。

  • [mssql] [feature]

    现在,通过建立一个 Sequence 在任何整数列上构造。Derek Harland提供。

    References: #2644

  • [mssql] [bug]

    在mssql信息模式中,在不必要的.decode()调用周围添加了py3k条件,修复了py3k中的反射,也修复了0.7.10中的反射。

    References: #2638

  • [mssql] [bug]

    修正了字符类型char、nchar等的“collation”参数停止工作的回归,因为基本字符串类型现在支持“collation”。MSSQL方言中的文本、nchar、char和varchar类型现在是基本类型的同义词。

oracle

  • [oracle] [bug]

    cx-oracle方言将不再通过 encode() ,因为这在python 3上无效,并且阻止了语句在python 3上正常运行。我们现在只在 supports_unicode_binds 为false,当至少使用了cx_Oracle的版本5时,cx_Oracle不是这样。

misc

  • [bug] [tests]

    修正了在测试执行中“日志”的导入,它在某些Linux平台上不起作用。也在0.7.11.

    References: #2669

0.8.0b2

Released: December 14, 2012

orm

  • [orm] [feature]

    补充 KeyedTuple._asdict()KeyedTuple._fieldsKeyedTuple 类以提供与Python标准库的某种程度的兼容性 collections.namedtuple() .

    References: #2601

  • [orm] [feature]

    允许在定义关系的主联接和辅助联接时使用同义词。

  • [orm] [feature] [extensions]

    这个 sqlalchemy.ext.mutable 扩展现在包括示例 MutableDict 类作为扩展的一部分。

  • [orm] [bug]

    这个 Query.select_from() 方法现在可以与 aliased() 在不干扰所选实体的情况下构造。基本上,这样的声明:

    ua = aliased(User)
    session.query(User.name).select_from(ua).join(User, User.name > ua.name)

    将保留select的columns子句,因为它来自指定的不负责任的“用户”;select_from仅发生在from子句中:

    SELECT users.name AS users_name FROM users AS users_1
    JOIN users ON users.name < users_1.name

    请注意,此行为与 Query.select_from() ,即根据不同的可选择项重述映射的实体:

    session.query(User.name).\
      select_from(user_table.select().where(user_table.c.id > 5))

    生产:

    SELECT anon_1.name AS anon_1_name FROM (SELECT users.id AS id,
    users.name AS name FROM users WHERE users.id > :id_1) AS anon_1

    正是后一个用例的“别名”行为阻碍了前一个用例。该方法现在专门考虑类似 select()alias() 与映射实体(如 aliased() 构造。

    References: #2635

  • [orm] [bug]

    这个 MutableComposite 类型不允许 MutableBase.coerce() 要使用的方法,即使代码似乎表明了这一意图,但现在可以工作了,并添加了一个简短的示例。作为一个副作用,这个事件处理程序的机制已经改变,所以 MutableComposite 类型不再按类型添加全局事件处理程序。也在0.7.10。

    References: #2624

  • [orm] [bug]

    别名/内部路径机制的第二次大修现在允许两个子类具有相同名称的不同关系,在使用完整的多态加载时,子查询支持或同时连接两个子类的热切加载。

    References: #2614

  • [orm] [bug]

    修正了一个多跳子查询加载在一个具有多态加载的特定子查询加载中会产生keyerror的错误。利用与 #2614 .

    References: #2617

  • [orm] [bug]

    修正了当与“fetch”同步策略匹配的对象在本地不存在时,query.update()会产生错误的回归。由Scott Torborg提供。

    References: #2602

engine

  • [engine] [feature]

    这个 Connection.connect()Connection.contextual_connect() 方法现在返回“分支”版本,以便 Connection.close() 在不影响原始连接的情况下,可以对返回的连接调用方法。使用时允许对称 EngineConnection 作为上下文管理器的对象:

    with conn.connect() as c: # leaves the Connection open
      c.execute("...")
    
    with engine.connect() as c:  # closes the Connection
      c.execute("...")

  • [engine] [bug]

    固定的 MetaData.reflect() 正确使用给定的 Connection ,如果给定,则不打开该连接的第二个连接 Engine .

    This change is also backported to: 0.7.10

    References: #2604

  • [engine]

    “reflect=true”参数 MetaData 被贬低。请使用 MetaData.reflect() 方法。

sql

  • [sql] [feature]

    这个 Insert 构造现在支持多值插入,即呈现为“insert into table values(…)、(…)、…”的插入。由PostgreSQL、SQLite和MySQL支持。非常感谢爱登卡马拉为这一个做了立法工作。

    References: #2623

  • [sql] [bug]

    修正了使用server_OnUpdate=<fetchedValue_defaultClause>而不传递“for_Update=true”标志将默认对象应用于server_Default的错误,从而消除了存在的所有问题。对于这种用法,不应该需要显式for_update=true参数(尤其是因为文档显示了一个未使用的示例),因此,如果标志未设置为与该参数对应的内容,则现在可以使用给定默认对象的副本在内部排列该参数。

    This change is also backported to: 0.7.10

    References: #2631

  • [sql] [bug]

    修正了由 #2410 据此 CheckConstraintTable.tometadata() 操作,因为它将分析父表的SQL表达式。操作现在复制给定的表达式以对应于新表。

    References: #2633

  • [sql] [bug]

    修正了在方言上使用小于实际列标识符大小的标签长度无法在select语句中正确呈现列的错误。

    References: #2610

  • [sql] [bug]

    这个 DECIMAL 现在,在呈现DDL时,type将使用“precision”和“scale”参数。

    References: #2618

  • [sql] [bug]

    对“布尔”进行了调整(即 __nonzero__ )二进制表达式的计算,即 x1 == x2 ,以便“自动分组”应用于 BinaryExpression 在某些情况下不会妨碍这种比较。以前,类似这样的表达式:

    expr1 = mycolumn > 2
    bool(expr1 == expr1)

    将评估为 False ,即使这是身份比较,因为 mycolumn > 2 在放入 BinaryExpression 从而改变了它的身份。 BinaryExpression 现在跟踪传入的“原始”对象。另外, __nonzero__ 方法现在只在运算符为 ==!= -所有其他人都会加薪 TypeError .

    References: #2621

  • [sql] [bug]

    修复了在 ColumnElement 如果 ColumnOperators.__getitem__() 已实施。新的NotImplementedError通过 __iter__() .

  • [sql] [bug]

    修复了类型_胁迫()中的错误,如果将该语句用作另一语句内的子查询以及其他类似情况,则键入信息可能会丢失。此外,当Oracle/MSSQL方言应用限制/偏移包装时,会导致输入信息丢失。

    References: #2603

  • [sql] [bug]

    修正了在生成可选列的“代理”时没有使用列的“.key”的错误。这在0.7中可能没有发生,因为0.7在更广泛的场景中不尊重“.key”。

    References: #2597

postgresql

  • [postgresql] [feature]

    HSTORE 现在可以使用PostgreSQL方言。如果可用,也将使用psycopg2的扩展。由Audrius Ka_Ukauskas提供。

    References: #2606

sqlite

  • [sqlite] [bug]

    对0.7.9中发布的与sqlite相关的问题进行了更多调整,以便在反射外键时拦截旧的sqlite引用字符。除了截取双引号外,其他引用字符(如括号、反勾号和单引号)现在也被截取。

    This change is also backported to: 0.7.10

    References: #2568

mssql

  • [mssql] [feature]

    支持反射的“名称”的主要关键约束添加,礼貌戴夫摩尔。

    References: #2600

  • [mssql] [bug]

    修正了由于msql方言的“schema rendering”逻辑没有考虑.key,将“key”与“schema”一起用于所属表将无法定位结果行的错误。

    This change is also backported to: 0.7.10

oracle

  • [oracle] [bug]

    在访问引用dblink远程数据库的同义词时,修复了Oracle的表反射;虽然该语法在Oracle方言中已存在一段时间,但到目前为止,它从未被测试过。语法已经针对链接到自身的示例数据库进行了测试,但是在查询远程数据库以获取表信息时,“所有者”应该使用什么仍然存在一些不确定性。目前,用户链接“username”的值用于匹配“owner”。

    References: #2619

  • [oracle] [bug]

    Oracle long类型虽然是无边界的文本类型,但在返回结果行时似乎不使用cx_oracle.lob类型,因此已修复方言以排除应用cx_oracle.lob筛选的long。也在0.7.10。

    References: #2620

  • [oracle] [bug]

    已修复的用法 .prepare() 与cx-oracle结合使用,使返回值为 False 将导致没有呼叫 connection.commit() 从而避免“无事务”错误。两阶段事务现在已经显示为与sqlacalchemy和cx_oracle一起以基本方式工作,但是受到驱动程序观察到的警告的影响;请查看文档以了解详细信息。也在0.7.10。

    References: #2611

firebird

  • [firebird] [bug]

    在实验性的“火鸟+FDB”方言中添加了“FDB”的缺失导入。

    References: #2622

misc

  • [feature] [sybase]

    反射支持已添加到Sybase方言中。非常感谢Ben Trofatter为开发和测试这一点所做的所有工作。

    References: #1753

  • [feature] [pool]

    这个 Pool 现在将平均记录所有connection.close()操作,包括为无效连接、分离的连接和池容量之外的连接而发生的关闭。

  • [feature] [pool]

    这个 Pool 现在咨询 Dialect 有关连接应如何“自动回滚”以及如何关闭的功能。这将赋予方言更多的事务范围控制权,以便我们能够更好地实现事务解决方案,如pysqlite和cx_oracle可能需要的解决方案。

    References: #2611

  • [feature] [pool]

    新增 PoolEvents.reset() 挂接在连接自动回滚之前捕获事件,然后返回池。一起 ConnectionEvents.rollback() 这允许截获所有回滚事件。

  • [informix]

    已经删除了一些有关Informix事务处理的问题,包括跳过调用commit()/rollback()的功能,以及对begin()的一些硬编码隔离级别假设。由于我们没有任何用户使用这种方言,也没有任何对Informix数据库的访问权,因此我们无法很好地理解这种方言的状态。如果有人访问Informix想要帮助测试这种方言,请告诉我们。

0.8.0b1

Released: October 30, 2012

general

  • [general] [removed]

    “sqlAlchemy.exceptions”同义词“sqlAlchemy.exc”已完全删除。

    References: #2433

  • [general]

    sqlAlchemy 0.8现在以python 2.5及更高版本为目标。不再支持python 2.4。

orm

  • [orm] [feature]

    relationship()内部的主要重写现在允许连接条件,这些条件包括指向复合外键内的列。添加了一个用于非常专门化的PrimaryJoin条件的新API,允许在必要时通过将注释函数remote()和foreign()内联到表达式中来处理基于SQL函数、cast等的条件。以前使用半私有本地-远程-对方法的配方可以升级到这个新方法。

    References: #1401

  • [orm] [feature]

    新的带有多态性()的独立函数以独立形式提供query.with多态性()的功能。它可以应用于查询中的任何实体,包括作为联接的目标而不是“of_type()”修饰符。

    References: #2333

  • [orm] [feature]

    属性上的of_type()构造现在接受别名()类构造以及_多态构造,并与query.join()、any()和eager loaders subqueryload()、joinedload()一起使用,其中包含_eager()。

    References: #1106, #2438

  • [orm] [feature]

    对映射类的事件监听的改进允许为实例和映射器事件指定未映射的类。当传递propagate=true标志时,已建立的事件将自动设置在该类的子类上,并且在最终映射该类时,将为该类本身设置事件。

    References: #2585

  • [orm] [feature]

    “延迟声明性反射”系统已使用新的Deferredeflection类移动到声明性扩展本身中。这个类现在用单表继承和联合表继承用例来测试。

    References: #2485

  • [orm] [feature]

    添加了新的核心函数“inspect()”,它充当向映射器、对象和其他对象内省的通用网关。映射器和InstanceState对象已通过公共API进行了增强,该API允许检查映射的属性,包括列绑定或关系绑定属性的筛选器、当前对象状态的检查、属性的历史记录等。

    References: #2208

  • [orm] [feature]

    在会话中调用rollback()。begin_nested()现在只会使那些在该事务范围内有净更改的对象(即脏对象或在刷新时修改的对象)过期。这就允许begin_nested()的典型用例(即更改对象的一个子集)保留该子事务中未修改的较大封闭对象集的数据。

    References: #2452

  • [orm] [feature]

    添加了实用工具功能会话。启用_relationship_loading(),取代挂起的relationship.load_。然而,这两个特性都应该避免。

    References: #2372

  • [orm] [feature]

    向列_property()、relationship()、composite()添加了对.info字典参数的支持。所有MapperProperty类都有一个自动创建的.info dict。

  • [orm] [feature]

    现在,从映射的集合中添加/删除“无”将生成属性事件。以前,在某些情况下会忽略无附加。有关。

    References: #2229

  • [orm] [feature]

    映射集合中的none现在在刷新期间引发错误。以前,集合中的任何值都不会被静默忽略。

    References: #2229

  • [orm] [feature]

    query.update()方法现在对正在更新的表更为宽松。现在更好地支持纯表对象,并且可以将附加的联接继承子类与update()一起使用;子类表将是更新的目标,如果在where子句中引用父表,编译器将根据方言允许的语法调用update..以满足where子句。如果列是由“values”字典中的对象指定的,那么也支持MySQL的多表更新功能。PG的删除..核心中还没有使用。

  • [orm] [feature]

    创建事务后和事务结束后的新会话事件允许跟踪新的sessionTransaction对象。如果检查对象,则可用于确定会话何时首次激活以及何时停用。

  • [orm] [feature]

    查询现在可以加载实体/标量混合的“tuple”行,这些行包含不可哈希的类型,方法是在正在使用的相应typeengine对象上设置标记“hashable=false”。返回不可显示类型(通常是列表)的自定义类型可以将此标志设置为false。

    References: #2592

  • [orm] [feature]

    现在,查询的默认“自动关联”方式与select()相同。以前,在另一个查询中用作子查询的查询需要显式调用correlate()方法,以便将内部的表与外部的表相关联。和往常一样,correlate(none)禁用相关。

    References: #2179

  • [orm] [feature]

    在session.new或session.identityu map on session.add()、session.merge()等中建立对象后,现在会发出after-attach事件,以便在调用事件时在这些集合中表示该对象。在附加事件之前添加,以适应需要自动刷新w预附加对象的用例。

    References: #2464

  • [orm] [feature]

    当在刷新的“执行”部分中使用不受支持的方法时,会话将生成警告。这些是常见的方法add()、delete()等,以及集合和相关的对象操作,如在mapper级别的flush事件中调用的,如after ou insert()、after ou update()等。在很长一段时间内,当会话在Flus的执行中被操作时,sqlAlchemy无法保证结果,这一点已被显著记录。H计划,但是用户仍在这样做,所以现在有一个警告。也许有一天,会话将得到增强,以支持刷新内部的这些操作,但目前,结果还不能得到保证。

  • [orm] [feature]

    ORM实体可以传递给core select()构造,也可以传递给select()的select_from()、correlate()和correlate_except()方法,这些方法将在其中展开为可选择的。

    References: #2245

  • [orm] [feature]

    一些支持基于映射属性自动呈现关系联接条件,使用核心SQL构造。例如选择( [SomeClass] .where(someClass.someRelationship)将呈现从“someClass”中选择并使用“someRelationship”的primaryJoin作为where子句。这改变了在核心SQL上下文中使用“someClass.someRelationship”之前的含义;以前,它将“解析”为父可选的,这通常不有用。还可以使用query.filter()。有关。

    References: #2245

  • [orm] [feature]

    声明性_base()中的类注册表现在是一个weakValuedictionary。因此取消引用的“base”子类将被垃圾收集, if they are not referred to by any other mappers/superclass mappers . 请看这张票的下一个说明。

    References: #2526

  • [orm] [feature]

    单继承声明性子类上的列之间的冲突,无论是否使用mixin,都可以使用文档中描述的新@declared attr用法来解决。

    References: #2472

  • [orm] [feature]

    声明的属性现在可以用于非mixin类,即使这通常只对单继承子类列冲突解决有用。

    References: #2472

  • [orm] [feature]

    声明的属性现在可以用于非列或映射属性的属性,包括任何用户定义的值以及关联代理对象。

    References: #2517

  • [orm] [feature]

    非常有限 支持在类本身延迟时继承要GC'ed的映射器。映射器在没有多态属性的情况下,不能有自己的表(即仅单表INH)。这允许在没有表或映射指令的情况下创建声明性映射类的临时子类,以便在单元测试取消引用时被垃圾收集。

    References: #2526

  • [orm] [feature]

    声明性现在按字符串名和完整的模块限定名维护类的注册表。现在可以基于relationship()中的模块限定字符串查找多个同名类。简单类名查找(其中多个类共享相同的名称)现在会引发一条信息性错误消息。

    References: #2338

  • [orm] [feature]

    现在可以提供类绑定属性来覆盖任何非ORM类型的列,而不仅仅是描述符。

    References: #2535

  • [orm] [feature]

    添加了u标签并将columns关键字参数减少到query.subquery(),以提供两种替代策略来生成具有唯一命名列的查询。.

    References: #1729

  • [orm] [feature]

    如果由于过期/属性刷新/集合替换,对已检测集合的引用不再与父类相关联,但在现在分离的集合上接收到追加或删除操作,则会发出警告。

    References: #2476

  • [orm] [bug]

    ORM将在刷新期间执行额外的工作,以确定两个表之间的FK依赖关系在刷新期间并不重要。如果这些表是通过联合继承关联的,并且FK依赖关系不是继承条件的一部分,则会为用户保存一个use-alter指令。

    References: #2527

  • [orm] [bug]

    Instrumentation事件类_instrument()、类_uninstrument()和属性_instrument()现在只对分配给listen()的类的后代类触发。以前,无论传递的“target”参数如何,都会分配一个事件侦听器来侦听所有情况下的所有类。

    References: #2590

  • [orm] [bug]

    在以任意顺序发送多级子类或缺少中间类的情况下,with_polymorphic()以正确的顺序和正确的继承表生成联接。

    References: #1900

  • [orm] [bug]

    改进了joined/subquery的预加载,处理共享公共基础的子类实体链,但没有提供特定的“连接深度”。将在检测到“循环”之前单独链接到每个子类映射器,而不是将基类视为“循环”的源。

    References: #2481

  • [orm] [bug]

    session.is_modified()上的“被动”标志不再有效。在所有情况下,is_modified()只查看本地内存中的已修改标志,不会发出任何SQL或调用加载程序可调用文件/初始值设定项。

    References: #2320

  • [orm] [bug]

    使用“删除孤立级联”时发出的警告,如果没有单亲=真,则为一对多或多对多,这现在是一个错误。在任何情况下,ORM都无法在该警告之后工作。

    References: #2405

  • [orm] [bug]

    在flush事件(如before_flush()、before_update()等)中发出的惰性加载现在将在非事件代码中正常工作,考虑到惰性发出查询中使用的pk/fk值。以前,会建立特殊标志,使延迟加载基于父pk/fk值的“previous”值加载相关项,特别是在刷新中调用时;以这种方式加载的信号现在本地化为工作单元实际需要加载的位置。请注意,UOW有时会在调用before_update()事件之前加载这些集合,因此当在刷新事件中访问时,根据发出延迟加载的时间,使用“被动_updates”可能会影响集合是否表示“旧”或“新”数据。在用户事件代码依赖于旧行为的可能性极小的情况下,更改是向后不兼容的。

    References: #2350

  • [orm] [bug]

    由于事件监听器的原因,继续执行额外的状态后刷新;从属性的角度来看,任何被标记为“脏”的状态,通常通过列属性set events in after_insert(),after_update()等,在所有情况下都将重置“历史”标志,而不是只重置那些属于刷新的实例。这样做的效果是,这种“脏”状态不会在刷新后继续,也不会导致update语句。为此会发出警告;set_committed_state()方法可用于在不生成历史事件的情况下为对象分配属性。

    References: #2566, #2582

  • [orm] [bug]

    修复了在mixin上,@声明的属性列和直接定义的列之间缓慢演变的断开连接。在这两种情况下,列将应用于声明的类表,但不应用于已联接继承子类的表。以前,直接定义的列将同时放置在基表和子表上,这通常不是所需要的。

    References: #2565

  • [orm] [bug]

    当父类本身映射到join()或select()语句时,声明性现在可以将在单个表继承子类上声明的列传播到父类的表,直接或通过联接继承,而不仅仅是表。

    References: #2549

  • [orm] [bug]

    当useList=false与“动态”加载程序组合时,会发出错误。这是0.7.9中的警告。

  • [orm] [removed]

    ORM的遗留“mutable”系统,包括mutabletype类,以及pickletype和postgresql.array上的mutable=true标志已被删除。ORM使用0.7中引入的sqlAlchemy.ext.mutatable扩展来检测就地突变。移除可变类型和相关结构会从SQLAlchemy的内部消除大量的复杂性。这种方法执行得不好,因为使用时会扫描会话的全部内容。

    References: #2442

  • [orm] [removed]

    删除了不推荐的标识符:

    • allow_null_pks mapper()参数(使用allow_partial_pks)

    • _ get_col_to_prop()mapper方法(使用get_property_by_column())

    • 不要将参数加载到session.merge()(使用load=true)

    • sqlAlchemy.orm.shard模块(使用sqlAlchemy.ext.horizontal_shard)

  • [orm] [moved]

    InstrumentationManager接口和替代类实现的整个相关系统现在被移到sqlAlchemy.ext.Instrumentation。这是一个很少使用的系统,它为类工具的机制增加了显著的复杂性和开销。新的体系结构允许它在实际导入InstrumentationManager之前保持未使用状态,此时它将被引导到核心中。

examples

  • [examples]

    烧杯缓存示例已转换为使用 dogpile.cache . 这是一个新的缓存库,由烧杯缓存内部的同一个创建者编写,代表了一个大大改进、简化和现代化的缓存系统。

    参见

    狗堆缓存

    References: #2589

engine

  • [engine] [feature]

    连接事件侦听器现在可以与单个连接对象相关联,而不仅仅是引擎对象。

    References: #2511

  • [engine] [feature]

    “before”cursor“execute”事件触发所谓的“cursor”事件,通常是主键绑定序列的特殊情况执行,返回时单独调用的默认生成SQL短语不与insert一起使用。

    References: #2459

  • [engine] [feature]

    测试套件使用的库已经被移动了一点,以便它们再次成为SQLAlchemy安装的一部分。此外,新的sqlAlchemy.testing.suite包中还存在一套新的测试。这是一个正在开发中的系统,希望为外部方言提供一个通用的测试套件。在SQLAlchemy之外维护的方言可以使用新的测试夹具作为自己测试的框架,并免费获得一套以方言为中心的“符合性”测试,包括一个改进的“需求”系统,在该系统中可以启用或禁用特定的功能和特性进行测试。

  • [engine] [feature]

    添加了一个新的系统,可以在不使用入口点的情况下注册正在进行的新方言。请参阅“注册新方言”文档。

    References: #2462

  • [engine] [feature]

    如果没有显式传递,“必需”标志在bindparam()上默认设置为true,如果没有传递“value”或“callable”参数。这将导致语句执行检查绑定参数的最终集合中是否存在参数,而不是隐式地指定none。

    References: #2556

  • [engine] [feature]

    各种API对“方言”API进行了调整,以更好地支持高度专业化的系统,如Akiban数据库,包括更多的钩子,以允许执行上下文访问类型处理器。

  • [engine] [feature]

    inspector.get_primary_keys()已弃用;请使用inspector.get_pk_constraint()。戴安娜·克拉克。

    References: #2422

  • [engine] [feature]

    新的C扩展模块“utils”已经添加用于额外的功能加速,因为我们有时间来实现。

  • [engine] [bug]

    inspector.get_table_names()order_by=“foreign_key”功能现在首先按dependee对表进行排序,以与util.sort_tables和metadata.sorted_tables一致。

  • [engine] [bug]

    修复了一个错误,即如果数据库重新启动影响到多个连接,则每个连接都将单独调用池的新处置,即使只需要一个处置。

    References: #2522

  • [engine] [bug]

    select()的.c.属性上的列的名称。apply摼labels()现在基于那些具有明确名称.key的列,而不是基于<tablename>>colname>。

    References: #2397

  • [engine] [bug]

    表上的autoload_replace标志为false时,将跳过引用已声明列的任何反射的外键约束,假定in python声明列将接管在python foreign key或foreignkeyconstraint声明中指定的任务。

  • [engine] [bug]

    resultProxy方法插入了_primary_key、last_updated_params()、last_inserted_params()、postfeet_cols()、prefetch_cols()全部断言给定语句是已编译的构造,并且是适当的insert()或update()语句,否则会引发invalidRequestError。

    References: #2498

  • [engine]

    结果proxy.last_inserted_id被删除,替换为插入的_primary_key。

sql

  • [sql] [feature]

    添加了新方法 Engine.execution_options()Engine . 此方法的工作原理与 Connection.execution_options() 它将创建一个父对象的副本,该副本将引用新的选项集。该方法可用于构建切分方案,其中每个引擎共享相同的基础连接池。该方法已经在ORM中对水平切碎配方进行了测试。

  • [sql] [feature]

    核心操作系统的主要重做,允许重新定义现有的操作人员以及在类型级别添加新的操作人员。可以从现有类型创建新类型,这些类型添加或重新定义导出到列表达式的操作,其方式与ORM允许Comparator_工厂的方式类似。新的体系结构将此功能移入核心,以便在所有情况下都能一致地使用它,使用现有的类型传播行为清晰地传播。

    References: #2547

  • [sql] [feature]

    作为补充,类型现在可以提供“bind expressions”和“column expressions”,允许在编译时将SQL表达式注入到每列或每绑定级别的语句中。这是为了适应需要在SQL级别增强绑定和结果行为的类型的用例,而不是在Python级别。允许透明加密/解密、使用PostGIS函数等方案。

    References: #1534, #2547

  • [sql] [feature]

    核心运营商系统现在包括 getitem 运算符,即python中的括号运算符。它首先用于为PostgreSQL数组类型提供索引和切片行为,还为自定义的最终用户定义提供了一个钩子。 __getitem__ 可在类型级别和ORM级别自定义运算符方案中应用的方案。 lshift (<) rshift (>>)还支持作为可选运算符。

    请注意,此更改会影响基于描述符的 __getitem__ ORM与synonym()或其他“描述符包装”方案一起使用的方案将需要使用自定义比较器来维护这种行为。

  • [sql] [feature]

    修改了用于确定用户定义运算符优先级的规则,即使用 op() 方法。以前,最小优先级应用于所有情况,现在默认优先级为零,低于除“逗号”以外的所有运算符(例如,在 func 调用)和“as”,还可以通过 op() 方法。

    References: #2537

  • [sql] [feature]

    向所有字符串类型添加了“collation”参数。当存在时,呈现为collate<collation>。这支持collate关键字,现在有几个数据库支持,包括mysql、sqlite和postgresql。

    References: #2276

  • [sql] [feature]

    现在可以通过将operators.custom_op()与unaryExpression()组合使用自定义一元运算符。

  • [sql] [feature]

    增强的泛型函数和函数。 * to allow for user-defined GenericFunction subclasses to be available via the func.* 名称空间由类名自动生成,可以选择使用包名称,还可以使呈现的名称与func.*中标识的名称不同。

  • [sql] [feature]

    现在将通过func生成cast()和extract()构造。 访问器也是如此,因为用户自然会尝试从func访问这些名称。 即使返回的对象不是FunctionElement,它们也可以执行预期的操作。

    References: #2562

  • [sql] [feature]

    现在可以使用新的inspect()服务获取inspector对象,它是

    References: #2208

  • [sql] [feature]

    列“反射”事件现在接受inspector对象作为“table”前面的第一个参数。使用这个非常新事件的0.7版本的代码将需要修改以添加“inspector”对象作为第一个参数。

    References: #2418

  • [sql] [feature]

    默认情况下,结果集中列目标的行为现在区分大小写。多年来,SQLAlchemy都会对这些值进行不区分大小写的转换,可能是为了缓解早期使用诸如Oracle和Firebird之类的方言的区分大小写问题。这些问题在更现代的版本中得到了更清晰的解决,因此在标识符上调用lower()会降低性能。通过在create_engine()上设置“case_unsensible=false”,可以重新启用不区分大小写的比较。

    References: #2423

  • [sql] [feature]

    当insert.values()或update.values()中的键不在目标表中时发出的“未使用的列名”警告现在是一个异常。

    References: #2415

  • [sql] [feature]

    在foreignkey、foreignkeyconstraint、礼遇Ryan Kelly中添加了“匹配”条款。

    References: #2502

  • [sql] [feature]

    增加了对从表别名中删除和更新的支持,这假设与查询中的其他地方相关,由Ryan Kelly提供。

    References: #2507

  • [sql] [feature]

    select()具有一个correlate_except()方法,自动关联除传递的可选择项之外的所有可选择项。

  • [sql] [feature]

    前缀_With()方法现在可用于select()、insert()、update()、delete()中的每一个,它们都具有相同的API,接受多个前缀调用,以及一个“方言名称”,以便前缀可以限制为一种方言。

    References: #2431

  • [sql] [feature]

    在select()构造中添加了reduce_columns()方法,使用util.reduce_columns实用程序函数替换内联列以删除等效列。reduce_columns()还添加了“with_only_同义词”,以将reduce仅限于具有相同名称的列。已删除不推荐使用的fold_equivalents()功能。

    References: #1729

  • [sql] [feature]

    重写startswith()和endswith()的contains()运算符,以便更好地使用否定(而不是like),并在编译时将它们组装起来,以便可以更改其呈现的SQL,例如,对于从

    References: #2470

  • [sql] [feature]

    向呈现创建表的系统添加了一个钩子,该钩子通过针对新的schema.createColumn构造构造@compiles函数来分别为每个列提供对呈现的访问。

    References: #2463

  • [sql] [feature]

    “scalar”选项现在有一个帮助生成建筑的where方法。另外,对ss“关联”列的方式进行了轻微的调整;新方法不再对所选的基础表列应用含义。这改善了一些相当深奥的情况,当时的逻辑似乎没有任何目的。

  • [sql] [feature]

    当第一次使用构造为引用多个远程表的ForeignKeyConstraint()时,会引发显式错误。

    References: #2455

  • [sql] [feature]

    补充 ColumnOperators.notin_()ColumnOperators.notlike()ColumnOperators.notilike()ColumnOperators .

    References: #2580

  • [sql] [change]

    如果指定了长度,则text()类型将呈现给定的长度。

  • [sql] [changed]

    expression.sql中的大多数类不再前面加下划线,即label、selectbase、generative和comparemixin。_ bindParamClause也被重命名为bindParameter。在可预见的将来,这些类的旧下划线名称仍然可用作同义词。

  • [sql] [bug]

    修复了传递关键字参数的错误 Compiler.process() 不会传播到select语句的columns子句中存在的列表达式。尤其是当依赖特殊标志的自定义编译方案使用时,会出现这种情况。

    References: #2593

  • [sql] [bug] [orm]

    的自相关特性 select() ,并由 Query ,对于直接在封闭select的from列表中呈现的select语句将不生效。SQL中的相关性仅适用于列表达式,如WHERE、ORDER BY、COLUMNS子句中的表达式。

    References: #2595

  • [sql] [bug]

    对列优先级的调整,将“concat”和“match”运算符移动到与“is”、“like”和其他运算符相同的位置;这有助于在与“is”一起使用时呈现括号。

    References: #2564

  • [sql] [bug]

    将列表达式应用于使用带或不带其他修改构造的标签的select语句将不再将该表达式“定向”到基础列;这将影响依赖列目标以检索结果的ORM操作。也就是说,类似于查询的查询(user.id,user.id.label('foo'))现在将分别跟踪每个“user.id”表达式的值,而不是将它们一起咀嚼。不期望任何用户会受到此影响;但是,如果select()命名的列对象具有任意的.label()名称,则使用select()与query.from()并尝试加载完全组合的ORM实体可能无法按预期工作,因为这些对象将不再针对由t映射的列对象。帽实体。

    References: #2591

  • [sql] [bug]

    对列“default”参数的解释进行了修复,将其解释为不可将ExecutionContext传递到关键字参数参数。

    References: #2520

  • [sql] [bug]

    当uniqueconstraint、foreignkeyconstraint、checkconstraint和primarykeyconstraint直接引用一个表绑定的列对象(即不只是字符串列名称),并且只引用一个表时,它们都将自动附加到其父表。在0.8之前,此行为发生在uniqueconstraint和primarykeyconstraint,但不是foreignkeyconstraint或checkconstraint。

    References: #2410

  • [sql] [bug]

    typedecorator现在包含一个通用repr(),默认情况下,它按照“impl”类型工作。这是对那些指定自定义 __init__ 方法;如果这些类型需要提供忠实的构造函数表示形式,则需要重新定义uRepr_uu()。

    References: #2594

  • [sql] [bug]

    label(none)现在生成一个匿名标签,而不是返回列对象本身,与label(column,none)的行为一致。

    References: #2168

  • [sql] [removed]

    长期弃用和不起作用 assert_unicode 旗上 create_engine() 以及 String 被移除。

postgresql

  • [postgresql] [feature]

    postgresql.array有一个可选的“dimension”参数,它将为数组分配特定数量的维度,该数组将在ddl中呈现为数组。 [][] …,还提高了绑定/结果处理的性能。

    References: #2441

  • [postgresql] [feature]

    postgresql.array现在支持索引和切片。python[]运算符可用于所有类型为array的SQL表达式;可以传递整数或简单切片。切片还可以通过将它们传递到update.values()中,在update语句的set子句的赋值端使用;有关示例,请参见文档。

  • [postgresql] [feature]

    添加了新的“array literal”构造postgresql.array()。基本上是呈现为数组的“元组” [1,2,3] .

  • [postgresql] [feature]

    添加了对postgresql only关键字的支持,该关键字可以出现在select、update或delete语句中对应的表中。使用with_hint()建立短语。礼遇Ryan Kelly

    References: #2506

  • [postgresql] [feature]

    PostgreSQL方言的“ischema-name”字典是“非官方”定制的。也就是说,可以将postgis类型等新类型添加到该字典中,并且pg类型反射代码应该能够处理参数数目可变的简单类型。这里的功能“非官方”有三个原因:

    1. 这不是“官方”API。理想情况下,“官方”API允许以通用方式在方言或全局级别自定义类型处理可调用文件。

    2. 这只针对pg方言实现,特别是因为pg对自定义类型和其他数据库后端具有广泛的支持。真正的API将在默认方言级别实现。

    3. 这里的反射代码只针对简单类型进行测试,并且可能与更多的复合类型存在问题。

    Patch Courtesy_ric Lemoine.

mysql

  • [mysql] [feature]

    在mysql方言中添加了时间类型,接受“fst”参数,该参数是最新mysql版本的新“分数秒”说明符。数据类型将解释从驱动程序接收到的微秒部分,但是请注意,此时大多数/所有mysql dbapis都不支持返回该值。

    References: #2534

  • [mysql] [bug]

    Dialect在第一次连接时不再发出昂贵的服务器排序查询以及服务器外壳。这些功能仍然是半私有的。

    References: #2404

sqlite

  • [sqlite] [feature]

    使用基于名称的格式字符串和regexps,对sqlite日期和时间类型进行了大修,以支持更开放的输入和输出格式。新的参数“微秒”还提供了省略时间戳“微秒”部分的选项。感谢内森·赖特的工作和测试。

    References: #2363

  • [sqlite]

    补充 NCHARNVARCHAR 到sqlite方言的可识别类型名称列表中进行反射。sqlite返回给定类型的名称作为返回的名称。

    References: rc3addcc9ffad

mssql

  • [mssql] [feature]

    可以为SQL Server方言指定数据库限定的架构名称,即“schema='mydatabase.dbo'”;反射操作将检测到该名称,将架构拆分为“.”以分别获取所有者,并在反射“dbo”所有者内的目标之前发出“use mydatabase”语句;然后还原从db_name()返回的现有数据库。

  • [mssql] [feature]

    更新了对mxodbc驱动程序的支持;为了完全兼容,建议使用mxodbc 3.2.1。

  • [mssql] [bug]

    删除了列与标量select via==的比较将强制使用SQL Server方言的in的遗留行为。这是在其他场景中失败的隐式行为,因此被移除。依赖于此的代码需要修改才能显式使用column.in(select)。

    References: #2277

oracle

  • [oracle] [feature]

    可以通过使用exclude_setinputsizes方言参数发送要排除的字符串dbapi类型名称列表来自定义从setinputsizes()集中排除的列的类型。此列表以前已修复。列表现在还默认为字符串、Unicode、从列表中删除CLOB和NCLOB。

    References: #2561

  • [oracle] [bug]

    现在,当为bindparam()对象生成相同的命名绑定参数时,引用信息从quote=true的列传递,就像生成的insert和update语句中的情况一样,这样可以完全支持未知的保留名称。

    References: #2437

  • [oracle] [bug]

    Oracle中的createindex构造现在将模式限定索引的名称为父表的名称。以前,这个名称被省略了,这显然在默认模式中创建了索引,而不是表的索引。

firebird

  • [firebird] [feature]

    “startswith()”运算符呈现为“starting with”,“~startswith()”呈现为“not starting with”,使用FB更高效的运算符。

    References: #2470

  • [firebird] [feature]

    添加了FDB驱动程序的实验方言,但由于我无法生成FDB包,因此未进行测试。

    References: #2504

  • [firebird] [bug]

    当尝试发出不带长度的varchar时,会引发compilerError,方法与mysql相同。

    References: #2505

  • [firebird] [bug]

    Firebird现在使用严格的“ansi绑定规则”,这样绑定参数就不会在语句的columns子句中呈现,而是按字面意思呈现。

  • [firebird] [bug]

    支持在将datetime类型与firebird一起使用时将datetime作为日期传递;其他方言支持这一点。

misc

Previous: 0.9换热器 Next: 0.7换热器