Release: 1.4.25 | Release Date: September 22, 2021

SQLAlchemy 1.4 Documentation

更改和迁移

1换热器

1.0.19

Released: August 3, 2017

oracle

  • [oracle] [bug] [performance] [py2k]

    修正导致的固定性能回归 #3937 其中,从5.3版开始的cx_Oracle删除了 .UNICODE 名称空间中的符号,该符号被解释为cx_oracle的“with_unicode”模式被无条件打开,它调用sqlAlchemy端的函数,该函数无条件地将所有字符串转换为unicode并造成性能影响。事实上,根据cx-oracle的作者,从5.1开始,“with-unicode”模式已经被完全删除,因此,如果在python 2下检测到cx-oracle 5.1或更高版本,则不再需要昂贵的unicode转换函数,并且禁用这些函数。在下删除的针对“with_unicode”模式的警告 #3937 也会恢复。

    References: #4035

1.0.18

Released: July 24, 2017

oracle

  • [oracle] [bug]

    cx_oracle 5.3现在似乎在构建中硬编码此标志,这一事实揭示了cx_oracle使用unicode模式对cx_oracle的修复;使用此模式的内部方法没有使用正确的签名。

    References: #3937

misc

  • [bug] [py3k] [tests]

    修复了测试夹具中的问题,该问题与自python 3.6.2起涉及上下文管理器的更改不兼容。

    References: #4034

1.0.17

Released: January 17, 2017

orm

  • [orm] [bug]

    修复了在使用多态继承时,涉及对多个实体进行联合的热切加载的错误,这将引发“nonetype”对象没有属性“isa”。该问题由修复程序引入 #3611 .

    References: #3884

misc

  • [bug] [py3k]

    修复了与转义字符串相关的、不带“r”修饰符的python 3.6拒绝警告,并为python 3.6增加了测试覆盖率。

    References: #3886

1.0.16

Released: November 15, 2016

orm

  • [orm] [bug]

    固定错误 Session.bulk_update_mappings() 其中,备用的已命名主键属性无法正确跟踪到UPDATE语句中。

    References: #3849

  • [orm] [bug]

    修正了对于一个多态加载的映射器来说,连接的预加载将失败,在这个映射器中,多态性被设置为一个未映射的表达式,如case表达式。

    References: #3800

  • [orm] [bug]

    修复了为通过发送到会话的无效绑定引发参数错误的错误。 Session.bind_mapper()Session.bind_table() ,否则将无法正确引发构造函数。

    References: #3798

  • [orm] [bug]

    固定错误 Session.bulk_save() 如果更新无法与实现版本ID计数器的映射一起正常工作。

    References: #3781

  • [orm] [bug]

    修正了错误 Mapper.attrsMapper.all_orm_descriptors 当首次调用这些访问器后,将映射器属性或其他ORM构造添加到映射器/类中时,其他派生属性将无法刷新。

    References: #3778

mssql

  • [mssql] [bug]

    更改了用于获取“默认架构名称”的查询,从查询数据库主体表的查询改为使用“schema_name()”函数,因为已报告问题:以前的系统在Azure数据仓库版本上不可用。希望这最终能够在所有SQL Server版本和身份验证样式中工作。

    References: #3810

  • [mssql] [bug]

    更新了pyodbc的服务器版本信息方案,以使用SQL Server ServerProperty(),而不是依赖pyodbc.sql_dbms-ver,后者仍然不可靠,特别是在freetds中。

    References: #3814

  • [mssql] [bug]

    在导致连接池重置的断开连接异常列表中添加了错误代码20017“来自服务器的意外eof”。请示肯·罗宾斯。

    References: #3791

  • [mssql] [bug]

    修正了pyodbc方言(以及大多数不工作的adodbapi方言)中的错误,即密码或用户名字段中存在的分号可以解释为另一个令牌的分隔符;当存在分号时,这些值现在被引用。

    References: #3762

misc

  • [bug] [orm.declarative]

    修复了在包含额外列的联接表子类的子类中设置单个表会损坏映射表的外键集合,从而干扰关系的初始化的错误。

    References: #3797

1.0.15

Released: September 1, 2016

orm

  • [orm] [bug]

    修复了子查询预加载中的错误,即“of_type()”对象的子查询加载链接到普通映射类的第二个子查询加载,或多个“of_type()”属性的较长链,将无法正确链接联接。

    References: #3773, #3774

sql

  • [sql] [bug]

    固定错误 Table 其中内部方法 _reset_exported() 会损坏对象的状态。此方法适用于可选对象,在某些情况下由ORM调用;错误的映射器配置可能导致ORM在 Table 对象。

    References: #3755

mysql

  • [mysql] [bug]

    添加了对在url查询字符串中分析mysql/connector布尔和整数参数的支持:connection_timeout、connect_timeout、pool_size、get_warnings、raise_on_warnings、raw、consume_results、ssl_verify_cert、force_ipv6、pool_reset_session、compress、allow_local_infile、use_pure。

    References: #3787

misc

  • [bug] [ext]

    固定错误 sqlalchemy.ext.baked 当涉及多个子查询加载程序时,由于变量作用域问题,子查询预加载程序查询的取消绑定将失败。拉请求由马克·哈恩伯格提供。

    References: #3743

1.0.14

Released: July 6, 2016

examples

  • [examples] [bug]

    修正了在examples/vertical/dictike-polymorphic.py示例中发生的一个阻止其运行的回归。

    References: #3704

engine

  • [engine] [bug] [postgresql]

    修复了跨架构外键反射中的错误 MetaData.schema 参数,其中“默认”模式中存在的被引用表将失败,因为无法指示 Table 对于一个模式来说是“空白”的。特殊符号 sqlalchemy.schema.BLANK_SCHEMA 已添加为的可用值 Table.schemaSequence.schema ,指示架构名称应强制为 None 即使 MetaData.schema 指定。

    References: #3716

sql

  • [sql] [bug]

    修复了SQL Math Negation运算符中表达式类型不再是原始表达式的数值类型的问题。这将导致类型决定结果集行为的问题。

    References: #3735

  • [sql] [bug]

    修正了 __getstate__ / __setstate__ 由于1.0系列转换为 __slots__ . 该问题可能会影响某些第三方应用程序。拉式请求,由Pieter Mulder提供。

    References: #3728

  • [sql] [bug]

    FromClause.count() 正等待1.1的折旧。此函数使用表中的任意列,不可靠;对于核心使用, func.count() 应优先考虑。

    References: #3724

  • [sql] [bug]

    固定错误 CTE 结构,在使用联合时会导致它无法正确克隆,这在递归CTE中很常见。当CTE在诸如 column_property() .

    References: #3722

  • [sql] [bug]

    修正了错误 Table.tometadata() 会复制的 UniqueConstraint 对于每一个 Columnunique=True 参数。

    References: #3721

postgresql

  • [postgresql] [bug]

    修正了错误 TypeDecoratorVariant PostgreSQL方言对类型的检查不够深入,无法确定是否需要呈现smallserial或bigserial而不是serial。

    References: #3739

oracle

  • [oracle] [bug]

    固定错误 Select.with_for_update.of 如果Oracle的“rownum”限制/偏移方法无法适应“of”子句中的表达式,则必须在引用子查询中表达式的最顶层声明该表达式。如果需要,表达式现在被添加到子查询中。

    References: #3741

1.0.13

Released: May 16, 2016

orm

  • [orm] [bug]

    修正了“评估”策略中的错误 Query.update()Query.delete() 这将无法容纳具有“可调用”值的绑定参数,就像在按关系中的多对一相等表达式筛选时发生的情况一样。

    References: #3700

  • [orm] [bug]

    修复了当结合使用深层类继承层次结构和多个映射器配置步骤时,用于backrefs的事件侦听器可能会被无意中应用多次的错误。

    References: #3710

  • [orm] [bug]

    修正了通过 text() 构造到 Query.group_by() 方法将引发错误,而不是将对象解释为SQL片段。

    References: #3706

  • [orm] [bug]

    匿名标签应用于 func 传递到的构造 column_property() 这样,如果同一个属性被称为列表达式,则两次对名称进行重复数据消除,从而避免了“不明确的列”错误。以前, .label(None) 需要申请才能取消匿名。

    References: #3663

  • [orm] [bug]

    修复了ORM加载中出现在1.0系列中的回归,其中对缺少的预期列引发的异常将不正确地为 NoneType 错误,而不是预期的 NoSuchColumnError .

    References: #3658

examples

  • [examples] [bug]

    将“有向图”示例更改为不再将节点的整数标识符视为有效的;“高”和“低”引用现在允许在两个方向上有相互的边。

    References: #3698

sql

  • [sql] [bug]

    修正了使用时的错误 case_sensitive=False 用一个 Engine ,结果集将无法正确地容纳结果集中重复的列名,从而导致在1.0中执行语句时出错,并阻止“含糊不清的列”异常在1.1中运行。

    References: #3690

  • [sql] [bug]

    修正了现有表达式的否定在结果中不能正确地输入为布尔值,也不能在选择列表中匿名别名的错误,就像非否定的exists构造一样。

    References: #3682

  • [sql] [bug]

    修复了“未使用的列名”异常在以下情况下无法引发的错误: Insert.values() 调用时使用参数映射列表,而不是参数的单个映射。雅典娜·姚的请求。

    References: #3666

postgresql

  • [postgresql] [bug]

    为错误字符串“ssl错误:解密失败或错误记录mac”添加了断开连接检测支持。拉取请求由Iuri de Silvio提供。

    References: #3715

mssql

  • [mssql] [bug]

    修复了在SQL Server中应用于偏移量选择的by row_number over子句的错误,该错误将不适当地替换本地语句中的普通列,该列与语句的order by条件使用的标签名称重叠。

    References: #3711

  • [mssql] [bug] [oracle]

    修复了1.0系列中出现的回归,当这些方言将select包装在子查询中以提供限制/偏移行为时,将导致Oracle和SQL Server方言错误地解释结果集列,并且原始select语句多次引用同一列,例如列和标签o。对于同一列。这个问题与 #3658 在这种情况下,当错误发生时,也会导致 NoneType 错误,而不是报告找不到列。

    References: #3657

oracle

  • [oracle] [bug]

    修复了cx_Oracle Connect进程中在用户、密码或DSN为空时导致类型错误的错误。这阻止了对Oracle数据库的外部身份验证,并阻止了连接到默认DSN。连接字符串oracle://now使用操作系统用户名登录到默认DSN,相当于使用“/”和sqlplus进行连接。

    References: #3705

  • [oracle] [bug]

    修正了当二进制和其他LOB类型正在运行时,Oracle主要使用的结果代理中的错误,例如,当使用查询/语句缓存时,类型级别的结果处理器,特别是二进制类型本身以及任何其他处理器所需的结果处理器,将在第一次运行语句后丢失,因为它从e缓存的结果元数据。

    References: #3699

misc

  • [bug] [py3k]

    修复了“到列表”转换中的错误,其中单个字节对象将被转换为单个字符的列表。这将影响其他事情,使用 Query.get() 方法的主关键字是一个字节对象。

    References: #3660

1.0.12

Released: February 15, 2016

orm

  • [orm] [bug]

    固定错误 Session.merge() 如果一个具有复合主键的对象具有某些而不是所有pk字段的值,则会发出一条select语句,将内部never-set符号泄漏到查询中,而不是检测该对象没有可搜索的主键,因此不应发出select。

    References: #3647

  • [orm] [bug]

    修正了自0.9以来0.9样式加载程序选项系统无法适应多个 undefer_group() 单个查询中的加载程序选项。倍数 undefer_group() 现在,即使是针对同一实体,也会考虑选择权。

    References: #3623

engine

  • [engine] [bug] [mysql]

    重述 #2696 ,在1.0.10中首次发布,它试图通过发出异常警告来解决python 2缺少异常上下文报告的问题,该异常在尝试回滚已失败的事务时被第二个异常中断;mysql后端继续出现此问题,并结合一个意外的保存点。ly lost,这会在尝试回滚时导致“无此类保存点”错误,从而掩盖了原始条件。

    该方法已被推广到核心“安全重发”功能,该功能发生在ORM和核心上的任何事务回滚位置,以响应尝试提交的错误,包括由 SessionConnection 以及发生在“释放保存点”上的失败等操作中。以前,修复只针对ORM刷新/提交过程中的特定路径;现在它也适用于所有事务上下文管理器。

    References: #2696

sql

  • [sql] [bug]

    修复了“literal_binds”标志未传播的问题 insert()update()delete() 编译为字符串SQL时构造。由Tim Tate提出请求。

    References: #3643

  • [sql] [bug]

    修复了意外使用python的问题 __contains__ 用列表达式重写(例如使用 'x' in col )在数组类型的情况下会导致无限循环,因为python将此延迟到 __getitem__ 从不为此类型引发的访问。总的来说,所有使用 __contains__ 现在引发NotImplementedError。

    References: #3642

  • [sql] [bug]

    固定错误 Table 出现在0.9系列周围的元数据构造,其中向 Table 如果没有被勾选,就无法正确地确定 Column 在“c”集合中,会导致ORM配置等方面的问题。这可能会影响用例,例如 extend_existing 以及其他。

    References: #3632

postgresql

  • [postgresql] [bug]

    固定错误 text() 构造双冒号表达式不能正确转义的位置,例如 some\:\:expr ,这是呈现PostgreSQL样式的强制转换表达式时最常见的要求。

    References: #3644

mssql

  • [mssql] [bug]

    修正了 extract() 函数在针对日期时间值的mssql上使用时;关键字周围的引号将被删除。拉请求由Guillaume Doumenc提供。

    References: #3624

  • [mssql] [bug] [firebird]

    修复了1.0回归,其中不再对通过纯文本或通过 text() 构造,影响关闭光标后擦除cursor.rowcount的驱动程序,如SQL Server ODBC和Firebird驱动程序。

    References: #3622

oracle

  • [oracle] [bug] [jython]

    修复了Jython Oracle编译器中的一个小问题,该问题涉及“返回”的呈现,该问题允许这种当前不受支持/未经测试的方言在1.0系列中初步工作。拉取请求由卡洛斯·里瓦斯提供。

    References: #3621

misc

  • [bug] [py3k]

    修复了一些异常重新引发场景将异常作为“原因”附加到自身的错误;虽然python 3解释器可以接受这一点,但它可能会在ipython中导致无休止的循环。

    References: #3625

1.0.11

Released: December 22, 2015

orm

  • [orm] [bug]

    在1.0.10中由修复导致的固定回归 #3593 对于class->poly-subclass->class->poly-baseclass连接添加的多态连接加载检查在class->poly-subclass->class的情况下将失败。

    References: #3611

  • [orm] [bug]

    固定错误在哪里 Session.bulk_update_mappings() 而relevant在使用时不会碰到版本ID计数器。这里的经验仍然有点粗糙,因为在给定的字典中需要原始版本ID,而且还没有关于这个的干净的错误报告。

    References: #3610

  • [orm] [bug]

    主要修复 Mapper.eager_defaults 标志,如果要发出多个更新语句(作为刷新操作或批量更新操作的一部分),则不会正确使用此标志。此外,返回将在update语句中不必要地发出。

    References: #3609

  • [orm] [bug]

    修复了使用 Query.select_from() 方法将导致对 Query.with_parent() 方法失败。

    References: #3606

sql

  • [sql] [bug]

    固定错误 Update.return_defaults() 这将导致set子句中未包含的所有insert-default holding列(如主键列)呈现到返回中,即使这是一个更新。

    References: #3609

mysql

  • [mysql] [bug]

    对用于解析MySQL视图的正则表达式的一种调整,这样我们就不再假设“algorithm”关键字出现在反射视图源中,因为一些用户报告说,在某些Amazon RDS环境中不存在该关键字。

    References: #3613

  • [mysql] [bug]

    在mysql方言中添加了mysql 5.7的新保留字,包括'generated'、'optimizer_costs'、'stored'、'virtual'。拉车请求由汉诺施莱钦提供。

misc

  • [bug] [ext]

    进一步修复 #3605 POP方法 MutableDict ,其中不包括“default”参数。

    References: #3605

  • [bug] [ext]

    修复了烘焙装载机系统中的错误,其中用于设置烘焙懒惰装载机的系统范围monkeypatch会干扰其他依赖于懒惰装载作为回退的装载机策略,例如联接和子查询的热切装载机,从而导致 IndexError 映射器配置时出现异常。

    References: #3612

1.0.10

Released: December 11, 2015

orm

  • [orm] [bug]

    修正了当属性设置为“无”且之前未加载时,多对一关系的post-update将无法发出更新的问题。

    References: #3599

  • [orm] [bug]

    修正了0.8.0版和0.8.1版之间的回归错误。 #2714 . 如果在使用“with_多态性”的情况下,连接的热切加载需要通过子类绑定关系进行连接,则无法从正确的实体进行连接。

    References: #3593

  • [orm] [bug]

    固定joinedload错误,当a.查询包含强制子查询b的限制/偏移条件时会发生。关系使用“secondary”c.关系的primaryjoin引用的列不是主键的一部分,或者是联接继承子类表中的pk列,该子类表的属性名与父表的主键列d。查询会延迟PrimaryJoin中存在的列,通常是通过不包含在LOAD_ONLY()中;必要的列不会出现在子查询中并产生无效的SQL。

    References: #3592

  • [orm] [bug]

    一种罕见的情况,当 Session.rollback() 在a的范围内失败 Session.flush() 引发异常的操作(如在某些MySQL保存点案例中所观察到的)可以防止在刷新过程中发出原始数据库异常时对其进行观察,但只能在PY2K上进行,因为PY2K不支持异常链接;在PY3K上,原始异常被链接。作为解决方法,在这种特定情况下会发出一个警告,在我们继续引发回滚原始异常之前,至少显示原始数据库错误的字符串消息。

    References: #2696

orm declarative

  • [orm] [declarative] [bug]

    修正了在py2k中,unicode文字在声明性使用中不能作为类或其他参数的字符串名称的错误。 backref()relationship() . 拉取请求由Nils Philippsen提供。

sql

  • [sql] [feature]

    在UPDATE语句中添加了对参数顺序集子句的支持。通过传递 update.preserve_parameter_order 标记到核心 Update 构造或添加到 Query.update.update_args ORM级别的字典,还将参数本身作为2个元组的列表传递。感谢GorkaEguileor的实现和测试。

  • [sql] [bug]

    已修复的问题 Insert.from_select() 据此构造 Select 构造将具有 ._raw_columns 在编译 Insert 当目标 Table 具有python端默认值。这个 Select 构造将独立编译,在编译 InsertInsert 由于绑定参数重复,第二次编译时语句本身将失败。

    References: #3603

  • [sql] [bug] [postgresql]

    修复了创建没有列表,但约束(如check约束)将在定义中呈现错误逗号的错误错误;这种情况可能发生,如PostgreSQL继承没有自己列的表。

    References: #3598

postgresql

  • [postgresql] [bug]

    修正了如果引用的表有模式限定符,“for update of”postgresql特定的select修饰符将失败的问题;pg需要省略模式名称。请代戴安娜·克拉克提出请求。

    References: #3573

  • [postgresql] [bug]

    修复了某些类型的SQL表达式传递到的“where”子句的错误。 ExcludeConstraint 不能被正确接受。拉式请求,由aisch提供。

  • [postgresql] [bug]

    修正了 .python_type 属性 INTERVAL 归来 datetime.timedelta 以同样的方式 python_type 而不是提高 NotImplementedError .

    References: #3571

mysql

  • [mysql] [bug]

    修复了MySQL反射中的错误,其中 DATETIMETIMESTAMPTIME 类型将错误地放入 timezone 属性,而不是 fsp 属性。

    References: #3602

mssql

  • [mssql] [bug]

    将错误“20006:写入服务器失败”添加到pymssql驱动程序的断开连接错误列表中,因为观察到这会导致连接不可用。

    References: #3585

  • [mssql] [bug]

    如果SQL Server从日期或时间列返回无效的日期或时间格式,而不是由于非类型错误而失败,则现在将引发描述性ValueError。拉车请求由Ed Avis提供。

  • [mssql] [bug]

    修复了为mssql类型datetime2、time和datetimeoffset生成的ddl(精度为“零”)不会生成精度字段的问题。拉车请求由Jacobo de Vera提供。

misc

  • [change] [tests]

    ORM和核心教程一直采用doctest格式,现在在Python2和Python3中的普通单元测试套件中进行了练习。

  • [bug] [ext]

    增加了对 dict.pop()dict.popitem() 方法到 MutableDict 班级。

    References: #3605

  • [bug] [py3k]

    对内部getargspec()调用的更新、一些与py36相关的fixture更新,以及对两个迭代器的更改以“返回”而不是引发stopIteration,从而允许测试在py3.5、py3.6上无错误或警告地通过,pull请求由jacob macdonald、luri de silvio和phl jones提供。

  • [bug] [ext]

    修复了烘焙查询中的一个问题,其中直接或在惰性加载中使用的.get()方法未将映射器的“get子句”视为缓存键的一部分,如果重新生成该子句,则会导致绑定参数不匹配。这个子句是由映射器动态缓存的,但是在高度并发的情况下,第一次访问时可能会生成多次。

    References: #3597

1.0.9

Released: October 20, 2015

orm

  • [orm] [feature]

    添加了新方法 Query.one_or_none() 一样 Query.one() 但如果找不到行,则返回“无”。拉请求,由Esiegerman提供。

  • [orm] [bug] [postgresql]

    修正了1.0中使用“ExecuteMany”在ORM中更新语句的新特性(例如 更新语句现在与executeMany()一起以刷新方式批处理 )当使用服务器端版本生成方案时,会在PostgreSQL和其他返回后端中断,因为服务器端值是通过返回来检索的,ExecuteMany不支持返回。

    References: #3556

  • [orm] [bug]

    修复了在内部日志中对某些类型的内部列加载器选项进行字符串化时可能出现的罕见类型错误。

    References: #3539

  • [orm] [bug]

    固定错误 Session.bulk_save_objects() 如果一个映射列具有某种“更新时获取”值,并且不在给定对象中本地存在,则会导致操作中出现attributeError。

    References: #3525

  • [orm] [bug]

    修正了1.0回归,其中“无负载”加载程序策略将无法对多对一关系起作用。加载程序使用API将“none”放入字典中,字典中不再实际写入值;这是 #3061 .

    References: #3510

examples

  • [examples] [bug]

    修复了“history_meta”示例中的两个问题,即历史跟踪可能遇到空历史,并且键入备用属性名的列将无法正确跟踪。修复亚历克斯·弗雷泽的礼貌。

sql

  • [sql] [bug]

    修正了1.0发布的多值插入语句的默认处理器中的回归, #3288 ,在使用默认值的情况下,默认保留列的列类型不会传播到已编译语句,从而导致绑定级别类型处理程序未被调用。

    References: #3520

postgresql

  • [postgresql] [bug]

    对反映存储选项和使用的新PostgreSQL特性的调整 #3455 在1.0.6中发布,以禁用PostgreSQL版本<8.2的功能,其中 reloptions 没有提供列;这允许AmazonRedshift重新工作,因为它基于PostgreSQL的8.0.x版本。修好礼貌皮特·霍洛本。

oracle

  • [oracle] [bug] [py3k]

    修正了对cx_Oracle5.2版的支持,它在python 3下绊倒了sqlachemy的版本检测,并且无意中没有使用正确的python 3 Unicode模式。这将导致诸如绑定变量被错误地解释为空以及行被静默地不返回等问题。

    This change is also backported to: 0.7.0b1

    References: #3491

  • [oracle] [bug]

    修复了Oracle方言中的错误,其中引用了名称以强制所有小写字母的表和其他符号的反射在反射查询中无法正确识别。这个 quoted_name 构造现在被应用于在“名称规范化”过程中检测为强制进入所有小写的传入符号名。

    References: #3548

misc

  • [feature] [ext]

    增加了 AssociationProxy.info 参数 AssociationProxy 建造商,以适应 AssociationProxy.info 已添加的访问器 #2971 . 这是可能的,因为 AssociationProxy 是显式构造的,与通过decorator语法隐式构造的混合体不同。

    References: #3551

  • [bug] [sybase]

    修复了Sybase反射的两个问题,即允许反射不带主键的表,并确保预先提取涉及外键检测的SQL语句,以避免嵌套查询时出现驱动程序问题。这里的修复是由Eugene Zapolsky提供的;请注意,我们目前无法测试Sybase来本地验证这些更改。

    References: #3508, #3509

1.0.8

Released: July 22, 2015

engine

  • [engine] [bug]

    修复了一个严重问题,即如果池在失效和失败后尝试重新连接,则可以针对过时连接调用池“checkout”事件处理程序,而不调用“connect”事件处理程序;过时连接将保持存在,并将在后续尝试中使用。这个问题在1.0.2之后的1.0系列中有更大的影响,因为它还提供了一个空白的 .info 事件处理程序的字典;在1.0.2之前 .info 字典仍然是前一本。

    This change is also backported to: 0.7.0b1

    References: #3497

sqlite

  • [sqlite] [bug]

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

    This change is also backported to: 0.9.10

    References: #3495

misc

  • [misc] [bug]

    修复了utils中的特定基类未实现的问题 __slots__ 因此,这意味着该类的所有子类也没有,否定了 __slots__ 在使用中。除了Ironpython没有引起任何问题,它显然没有实现 __slots__ 行为与cpython兼容。

    References: #3494

1.0.7

Released: July 20, 2015

orm

  • [orm] [bug]

    修正了1.0回归,其中值对象覆盖 __eq__() 要返回一个不支持布尔值的对象,例如一些地理计算类型以及numpy类型,正在测试 bool() 在工作单元更新操作期间,其中在0.9中 __eq__() 为了防范这一点,我们对“是真的”进行了测试。

    References: #3469

  • [orm] [bug]

    修正了1.0回归,即如果在“优化继承加载”中加载“延迟”属性,则无法正确填充该属性,这是在联接表继承的情况下发出的一个特殊选择,用于在不加载基表的情况下针对联接表填充过期或卸载的属性。这与一个事实有关,即sqla 1.0不再猜测加载延迟列,必须显式定向。

    References: #3468

  • [orm] [bug]

    修正了1.0回归,其中同义词映射属性的“父实体”位于 aliased() 对象将解析为原始映射器,而不是 aliased() 它的版本,从而导致 Query 它依赖于这个属性(例如它是构造函数中给出的唯一代表性属性)来为查询找出正确的FROM子句。

    References: #3466

orm declarative

  • [orm] [declarative] [bug]

    固定错误 AbstractConcreteBase 属性名与列名不同的ABC基上的列设置无法正确映射到最终的基类上的扩展。0.9上的失败将是无声的,而1.0上的失败引发了一个争论错误,因此在1.0之前可能没有被注意到。

    References: #3480

engine

  • [engine] [bug]

    固定回归,其中新方法 ResultProxy 由ORM使用 Query 对象(性能增强的一部分 #3175 )如果驱动程序(通常是MySQL)未能正确生成cursor.description,则不会引发“此结果不返回行”异常;相反,将引发针对nonetype的attributeError。

    References: #3481

  • [engine] [bug]

    固定回归式 ResultProxy.keys() 将为“匿名”标签返回未经调整的内部符号名称,这是我们看到为没有标签和类似标签的SQL函数生成的“foo_1”类型的标签。这是作为918一部分实施的性能增强的副作用。

    References: #3483

sql

  • [sql] [feature]

    增加了一个 ColumnElement.cast() 与独立方法执行相同目的的方法 cast() 功能。拉请求由塞巴斯蒂安银行提供。

    References: #3459

  • [sql] [bug]

    修正了文字强制的错误 TrueFalse 常数与 and_()or_() 会因属性错误而失败。

    References: #3490

  • [sql] [bug]

    修复了自定义子类 FunctionElement 或错误地将“none”或任何其他无效对象声明为 .type 属性将报告此异常,而不是递归溢出。

    References: #3485

  • [sql] [bug]

    修正了由于缺少modules sql操作符而无法反向工作的错误。 __rmod__ 方法。拉请求由丹·吉蒂克提供。

schema

  • [schema] [feature]

    添加了对postgresql和oracle支持的create sequence的minvalue、maxvalue、no minvalue、no maxvalue和cycle参数的支持。拉请求,由Jakeogh提供。

1.0.6

Released: June 25, 2015

orm

  • [orm] [bug]

    修正了1.0系列中的一个主要回归,即当对象的行没有净更改时,版本计数器功能将导致对象的版本计数器递增,而通过关系(例如通常是多对一)与之相关的对象则与之关联或取消关联,从而生成更新语句更新对象的版本计数器,而不更新其他任何内容。在使用相对较新的“服务器端”和/或“编程/条件”版本计数器功能(例如,将version_id_generator设置为false)的用例中,该bug可能导致更新而不发出有效的set子句。

    References: #3465

  • [orm] [bug]

    固定的1.0回归,其中单一继承的增强行为连接 #3222 对于一个带有单个继承子类的显式联接条件的联接,它不适当地发生,该继承子类不使用任何鉴别器,从而导致一个附加的“and null”子句。

    References: #3462

  • [orm] [bug]

    修正了新的错误 Session.bulk_update_mappings() 用于在WHERE子句中查找行的主键列也将包含在SET子句中的功能,不必要地将它们的值设置为自己。拉车请求由帕特里克·海斯提供。

    References: #3451

  • [orm] [bug]

    修复了一个意外的使用回归,其中自定义 Comparator 使用的对象 __clause_element__() 方法并返回一个ORM映射的对象 InstrumentedAttribute 而不是明确的 ColumnElement 当作为表达式传递给 Session.query() . 0.9中的逻辑正好成功地实现了这一点,因此现在支持这个用例。

    References: #3448

sql

  • [sql] [bug]

    修正了一个应用于 Label 对象在任何情况下都无法容纳标记的SQL表达式,因此任何使用 Label.self_group() 将使用原始的未自适应表达式。这样做的一个效果是 aliased() 构造不能完全容纳由映射的属性 column_property ,以便在某些类型的SQL比较中使用该属性时,无别名的表可能会泄漏。

    References: #3445

postgresql

  • [postgresql] [feature]

    使用新的关键字参数,在create index下添加了对存储参数的支持 postgresql_with . 还增加了对反射的支持,以支持 postgresql_with 标志以及 postgresql_using 标志,现在将设置为 Index 反映的对象,以及在新的“方言选项”字典中出现的结果 Inspector.get_indexes() . 拉客请求由皮特·霍洛本提供。

    References: #3455

  • [postgresql] [feature]

    添加了新的执行选项 max_row_buffer 它由psycopg2方言解释,当 stream_results 使用了选项,该选项对可以分配的行缓冲区的大小设置了限制。此值也基于发送到的整数值提供 Query.yield_per() . 拉请求由McClurem提供。

  • [postgresql] [bug] [pypy]

    重新修正了1.0.5中首次发布的这个问题,以再次修正psycopg2cffi jsonb支持,因为它们突然开启了2.7.1版中jsonb类型的无条件解码。版本检测现在指定2.7.1作为我们应该期望DBAPI为我们进行JSON编码的地方。

    References: #3439

  • [postgresql] [bug]

    修复了 ExcludeConstraint 构造以支持其他对象喜欢的公共特性 Index 现在,可以将列表达式指定为任意SQL表达式,例如 casttext .

    References: #3454

mssql

  • [mssql] [bug]

    使用时修复问题 VARBINARY 键入并插入null+pyodbc;pyodbc需要传递一个特殊对象才能保持null。作为 VARBINARY 类型现在通常是 LargeBinary 由于 #3039 ,此问题部分是1.0中的回归。pymsql驱动程序似乎未受影响。

    References: #3464

misc

  • [bug] [documentation]

    修复了方法类型的内部“memoization”例程,这样就不再使用python描述符;修复了这些方法的可检查性,包括对sphinx文档的支持。

    References: #2077

1.0.5

Released: June 7, 2015

orm

  • [orm] [feature]

    新增事件 InstanceEvents.refresh_flush() ,当在刷新过程中调用通过返回或python-side-default获取的插入或更新级别默认值时调用。这是为了提供一个由于 #3167 ,其中不再在刷新进程中调用属性和验证事件。

    References: #3427

  • [orm] [bug]

    “轻量级命名元组”用于 Query 返回未能实现的行 __slots__ 正确的,它仍然有一个 __dict__ . 这是可以解决的,但在极不可能的情况下,有人向返回的元组赋值,这将不再有效。

    References: #3420

engine

  • [engine] [feature]

    添加了新引擎事件 ConnectionEvents.engine_disposed() . 在 Engine.dispose() 方法被调用。

  • [engine] [feature]

    调整发动机插件挂钩,使 URL.get_dialect() 方法将继续返回 Dialect 当使用方言插件时,不需要调用方知道 Dialect.get_dialect_cls() 方法。

    References: #3379

  • [engine] [bug]

    修正了已知布尔值被 engine_from_config() 未正确分析;包括 pool_threadlocal 以及psycopg2的论点 use_native_unicode .

    References: #3435

  • [engine] [bug]

    增加了对行为错误的DBAPI的支持,该DBAPI将PEP-249异常名称链接到具有完全不同名称的异常类,从而防止SQLAlchemy自己的异常包装适当地包装错误。使用中的sqlAlchemy方言需要实现新的访问器 DefaultDialect.dbapi_exception_translation_map 为了支持这个特性,现在对py-postgresql方言实现了这个特性。

    References: #3421

  • [engine] [bug]

    修复了当使用池签出事件处理程序并且在处理程序本身中进行连接尝试失败时出现的错误,在释放连接错误本身的堆栈跟踪之前,所属的连接记录将不会被释放。对于只使用单个连接的测试池的情况,这意味着池将完全签出,直到释放堆栈跟踪。这主要影响非常具体的调试场景,在任何生产应用程序中都不太可能被注意到。修复程序在重新引发捕获的异常之前应用记录的显式签入。

    References: #3419

sql

  • [sql] [feature]

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

    This change is also backported to: 0.9.10

    References: #3418

postgresql

  • [postgresql] [bug] [pypy]

    修复了与pypy psycopg2cffi方言相关的一些类型和测试问题,特别是当前的2.7.0版本不支持JSONB类型。psycopg2功能的版本检测已调到psycopg2cffi的特定子版本中。此外,在psycopg2cffi下的psycopg2全系列功能已经启用了测试覆盖。

    References: #3439

mssql

  • [mssql] [bug]

    向mssql方言添加了新的方言标志 legacy_schema_aliasing 当设置为false时,它将禁用非常陈旧和过时的行为,即编译器试图将所有架构限定的表名转换为别名,以解决SQL Server在所有情况下都无法解析多部分标识符名称的旧问题和不再可定位的问题。这种行为阻止了更复杂的语句正常工作,包括那些使用提示的语句,以及嵌入相关select语句的CRUD语句。与其继续修复功能来处理更复杂的语句,不如禁用它,因为任何现代SQL Server版本都不再需要它。对于1.0.x系列,该标志默认为true,保持此版本系列的当前行为不变。在1.1系列中,它将默认为false。对于1.0系列,如果未显式设置为任一值,则在语句中首次使用模式限定表时会发出警告,这意味着对于所有现代SQL Server版本,该标志都设置为false。

    References: #3424, #3430

misc

  • [feature] [ext]

    为添加了支持 *args 以与 *args 支持 BakedQuery.add_criteria()BakedQuery.with_criteria() 方法。最初的公关人员是Naoki Inada。

  • [feature] [ext]

    添加了一个新的半公共方法 MutableBase MutableBase._get_listen_keys() . 在以下情况下需要重写此方法: MutableBase 子类需要为属性键传播事件,而不是与可变类型关联的键,在拦截 InstanceEvents.refresh()InstanceEvents.refresh_flush() 事件。目前的例子是复合材料 MutableComposite .

    References: #3427

  • [bug] [ext]

    固定回归 sqlalchemy.ext.mutable 由于错误修复导致的扩展 #3167 ,其中不再在刷新进程中调用属性和验证事件。可变扩展依赖于这种行为,在这种情况下,列级python-side默认值负责在insert或update时生成新值,或者在从返回子句中为“急用默认值”模式提取值时。新值在填充时不会受到任何事件的影响,可变扩展无法建立正确的强制或历史监听。新事件 InstanceEvents.refresh_flush() 添加了可变扩展现在用于此用例的。

    References: #3427

1.0.4

Released: May 7, 2015

orm

  • [orm] [bug]

    修正了意外的使用回归,在奇数情况下,关系的PrimaryJoin涉及到与不可缓存的类型(如hstore)的比较,由于对语句参数进行了面向哈希的检查,延迟加载将失败,因为 #3061 在中使用哈希和修改 #3368 在比“等待加载”更常见的情况下发生。现在检查值 __hash__ 预先设定属性。

    References: #3416

  • [orm] [bug]

    放宽了作为 #3347 在连接的预紧负荷内将内部连接连接连接在一起时,防止未知情况的发生。 innerjoin=True ;如果某些联接使用“辅助”表,则断言需要展开进一步的联接才能传递。

    References: #3347, #3412

  • [orm] [bug]

    已修复/添加到测试中,但有更多表达式报告为失败,新的“Entity”键值添加到 Query.column_descriptions ,发现“from”子句的逻辑再次被改写,以适应别名类中的列,并在这些情况下报告“aliased”标志的正确值。

    References: #3320, #3409

schema

misc

  • [bug] [ext]

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

    This change is also backported to: 0.9.10

    References: #3408

  • [bug] [pypy] [tests]

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

    This change is also backported to: 0.9.10

    References: #3406

1.0.3

Released: April 30, 2015

orm

  • [orm] [bug] [pypy]

    修复了从发布前的0.9.10开始的回归,原因是 #3349 检查查询状态的位置 Query.update()Query.delete() 将空元组与自身进行比较,方法是使用 is ,它在PyPy上无法生成 True 在本例中,这将在0.9中错误地发出警告,并在1.0中引发异常。

    References: #3405

  • [orm] [bug]

    修正了发行前0.9.10的回归,其中 entityQuery.column_descriptions 如果目标实体是从诸如 TableCTE 对象。

    References: #3320, #3403

  • [orm] [bug]

    固定在刷新过程中,当属性设置为SQL表达式进行更新时,SQL表达式与属性的前一个值进行比较时,将生成SQL比较,而不是 ==!= ,将引发异常“未定义此子句的布尔值”。修复程序确保工作单元不会以这种方式解释SQL表达式。

    References: #3402

  • [orm] [bug]

    修正了由于 #2992 文本元素放在 Query.order_by() 如果联接的EARGE LOAD需要将查询包装在子查询中以适应限制/偏移量,则将子句与联接的EARGE LOAD一起添加到内部查询的columns子句中,使它们被假定为表绑定的列名。

    最初,这里的行为是有意的,在这种情况下, query(User).order_by('name').limit(1) 将按顺序 user.name 即使查询是通过联接而修改的,也要在子查询中预先加载,例如 'name' 在这种情况下,将被解释为位于FROM子句内的符号 User.name ,然后将其复制到columns子句中,以确保它存在于order by中。但是,该特性无法预测 order_by("name") 指已经存在于本地columns子句中的特定标签名,而不是绑定到FROM子句中可选择项的名称。

    除此之外,对于不推荐使用的情况(如 order_by("name desc") 当它发出警告时, text() 应在此处使用(请注意,该问题不会影响以下情况: text() 显式使用),仍然会产生与以前不同的查询,其中“name desc”表达式被不适当地复制到columns子句中。解决方案是这样的:当扩充inner columns子句时,该特性的“joined foreign loading”方面将跳过这些所谓的“label reference”表达式,就好像它们是 text() 已构造。

    References: #3392

  • [orm] [bug]

    修正了关于 MapperEvents.instrument_class() 将其调用移动到类管理器插入类之后的事件,这与事件的文档显式声明的相反。开关的基本原理是由于声明性的,在将类映射为新类之前,为该类设置完整的“Instrumentation Manager”。 @declared_attr 中描述的功能 声明性混合的改进, @declared_attr 以及相关功能 但这一变化也与传统的 mapper() 为了一致性。然而,sqlsoup依赖于在经典映射下的任何检测之前发生的检测事件。在经典映射和声明性映射的情况下,行为被还原,后者通过使用简单的memoization实现,而不使用类管理器。

    References: #3388

  • [orm] [bug]

    新问题已修复 QueryEvents.before_compile() 对所做更改的事件 Query 对象要在事件中加载的实体集合将呈现在SQL中,但不会在加载过程中反映出来。

    References: #3387

engine

sql

  • [sql] [feature]

    添加了占位符方法 TypeEngine.compare_against_backend() 从0.7.6开始,它现在被Alembic迁移所消耗。用户定义的类型可以实现此方法,以帮助将类型与从数据库反映的类型进行比较。

  • [sql] [bug]

    修复了在SQL中截断长标签可能会产生与未截断的另一个标签重叠的标签的错误;这是因为截断的长度阈值大于截断后保留的标签部分。这两个值现在被设置为相同的;标签长度-6。这里的效果是,较短的列标签将被“截断”,在此之前它们不会被截断。

    References: #3396

  • [sql] [bug]

    固定回归归因于 #3282 何处 tables 作为关键字参数传递给 DDLEvents.before_create()DDLEvents.after_create()DDLEvents.before_drop()DDLEvents.after_drop() 事件不再是表的列表,而是包含第二个条目的元组列表,其中包含要添加或删除的外键。作为 tables 收集虽然被记录为不一定稳定,但已经开始被依赖,这种变化被认为是一种回归。此外,在某些情况下,对于“drop”,此集合将是一个迭代器,如果过早地迭代,则会导致操作失败。集合现在是所有情况下表对象的列表,现在添加了此集合格式的测试覆盖率。

    References: #3391

misc

  • [bug] [ext]

    修复了关联代理中的错误,其中关系上的any()/has()->scalar非对象属性比较将失败,例如 filter(Parent.some_collection_to_attribute.any(Child.attr == 'foo'))

    References: #3397

1.0.2

Released: April 24, 2015

orm declarative

  • [orm] [declarative] [bug]

    修复了有关声明性的意外使用回归 __declare_first____declare_last__ 不再在声明性基的超类上调用这些的访问器。

    References: #3383

sql

  • [sql] [bug]

    修复了在1.0.0b4中错误修复的回归(因此变为两个回归);错误地解释了select语句将按标签名称分组而fail的报告,某些后端(如SQL Server)根本不应按简单标签名称发出order by或group by;实际上,我们忘记了0.9已经发出在所有后端的简单标签名称上按排序,如中所述 标签构造现在可以按顺序单独呈现为其名称 ,即使1.0包含对该逻辑的重写作为 #2992 . 至于针对简单标签发出group by,即使PostgreSQL也有这样的情况,即使要分组的标签应该是明显的,它也会引发错误,因此很明显,group by不应该以这种方式自动呈现。

    在1.0.2中,当传递 Label 构造也存在于columns子句中。此外,只有在传递 Label 构造。

    References: #3338, #3385

1.0.1

Released: April 23, 2015

orm

  • [orm] [bug]

    固定问题,其中查询表单 query(B).filter(B.a != A(id=7)) 会使 NEVER_SET 符号,当给定一个瞬态对象时。对于持久化对象,它将始终使用持久化数据库值,而不是当前设置的值。如果启用了autoflush,那么对于持久值来说,这通常是不明显的,因为在任何情况下,任何挂起的更改都将首先刷新。但是,这与用于非负比较的逻辑不一致, query(B).filter(B.a == A(id=7)) ,它使用当前值并允许与瞬态对象进行比较。比较现在使用的是当前值,而不是数据库持久化值。

    不同于另一个 NEVER_SET 由以下原因引起的作为回归进行修复的问题: #3061 在这个版本中,这个特定的问题至少出现在0.8之前,可能更早,但是它是在修复相关的 NEVER_SET 问题。

    References: #3374

  • [orm] [bug]

    修正了意外使用回归的原因 #3061 其中never-set符号可能泄漏到面向关系的查询中,包括 filter()with_parent() 查询。这个 None 在所有情况下都会返回符号,但是在任何情况下,这些查询中的许多从未得到正确支持,并且在不使用is运算符的情况下生成与空值的比较。因此,还将向当前未提供的关系查询子集添加警告。 IS NULL .

    References: #3371

  • [orm] [bug]

    修正了由 #3061 在刷新挂起的对象之后,Never-Set符号可能会泄漏到Lazyload查询中。这通常发生在不使用简单“获取”策略的多对一关系中。好消息是,与0.9相比,修复提高了效率,因为我们现在可以在检测参数中存在的never-set符号之前完全跳过select语句。 #3061 我们看不出这里有没有设置。

    References: #3368

engine

  • [engine] [bug]

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

    This change is also backported to: 0.9.10

    References: #3375

sql

  • [sql] [bug]

    固定的问题是,如果存在直接选择查询,则无法将正确的布尔结果类型分配给结果映射,而是将列类型从查询中泄漏到结果映射中。这个问题也存在于0.9及更早版本中,但是在这些版本中影响较小。1,由于 #918 这变成了一种回归,因为我们现在依赖于结果映射非常精确,否则我们可以将结果类型处理器分配给错误的列。在所有版本中,此问题还具有这样的效果:简单存在不会应用布尔类型处理程序,从而导致后端的简单1/0值没有本机布尔值,而不是真/假。修复程序包括exists列参数将像其他列表达式一样标记为anon;对纯布尔表达式(如 not_(True()) .

    References: #3372

sqlite

  • [sqlite] [bug]

    修正了由于 #3282 ,其中,由于我们在创建/删除模式时尝试假定alter的可用性,对于sqlite,我们只是说根本不担心外键,因为在创建和删除表时alter不可用。这意味着在sqlite的情况下基本上跳过了表的排序,对于大多数sqlite用例来说,这不是问题。

    但是,当依赖项排序时,在sqlite上执行DROP操作的用户如果打开了包含数据和引用完整性的表,则会遇到错误。 does 无论是强制约束的DROP,当这些表具有数据时(只要没有引用数据,sqlite仍会很高兴地让您为不存在的表创建外键,并删除引用已启用约束的现有表的表)。

    为了保持 #3282 虽然仍允许sqlite删除操作保持排序,但我们现在使用正在考虑的完整FK进行排序,如果遇到无法解决的循环,则仅 then 我们是否放弃了对表进行排序的尝试,而是发出警告并使用未排序的列表。如果一个环境需要两个有序放置 and 有外键循环,然后警告说明他们需要恢复 use_alter 旗旗 ForeignKeyForeignKeyConstraint 对象,以便只从依赖项排序中省略这些对象。

    参见

    这个 use_alter 旗上 ForeignKeyConstraint 不再需要 -包含有关sqlite的更新注释。

    References: #3378

firebird

  • [firebird] [bug]

    修正了由于 #3034 其中限制/抵消条款没有被Firebird方言正确解释。拉请求礼貌的effem git。

    References: #3380

  • [firebird] [bug]

    修正了对“文本绑定”模式的支持,当使用限制/偏移量与FireBird一起使用时,这样当选择此选项时,值将再次以内联方式呈现。有关 #3034 .

    References: #3381

1.0.0

Released: April 16, 2015

orm

  • [orm] [feature]

    添加了新参数 Query.update.update_args 它允许kw参数,例如 mysql_limit 传递给基础 Update 构建。拉客请求,由Amir Sadoughi提供。

  • [orm] [bug]

    处理时发现不一致 Query.join() 多次指向同一目标;它仅在关系联接的情况下隐式地删除,并且由于 #3233 ,在1.0中,同一个表的联接的行为与0.9的行为不同,因为它不再有错误的别名。为了帮助记录这一变化,有关 #3233 在迁移注释中已进行了概括,并在以下情况下添加了警告: Query.join() 多次针对同一目标关系调用。

    References: #3367

  • [orm] [bug]

    在用半自参照(例如,两个连接的inh子类彼此引用)确定远程端时,对关系的启发式做了一个小的改进,非简单的连接条件使得考虑了父实体,并且可以减少使用 remote() 注释;这可以恢复一些可能在0.9.4之前没有注释的情况下工作的情况,通过 #2948 .

    References: #3364

sql

  • [sql] [feature]

    用于排序的拓扑排序 Table 对象并通过 MetaData.sorted_tables 集合现在将生成 确定性的 排序;也就是说,每次给定一组具有特定名称和依赖项的表时,排序都是相同的。这有助于比较DDL脚本和其他用例。表被发送到按名称排序的拓扑排序,拓扑排序本身将按顺序处理传入的数据。拉请求由塞巴斯蒂安银行提供。

    References: #3084

  • [sql] [bug]

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

    This change is also backported to: 0.9.10

    References: #3362

postgresql

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.10

    References: #3354

mssql

  • [mssql] [bug]

    修正了一种回归,即“上次插入的ID”机制无法在执行前插入主键值出现在插入参数中的插入上存储mssql的正确值,以及在“从选择插入”将目标列声明为列对象而不是字符串键的情况下存储mssql的正确值。

    References: #3360

  • [mssql] [bug]

    使用 Binary 构造函数现在出现在pymssql中,而不是修补其中的一个。拉米罗·莫拉莱斯的请求。

misc

  • [bug] [tests]

    修正了测试运行时使用的路径;对于sqla_nose.py和py.test,仅当未设置sys.flags.no_user_site时,才会在sys.path的头部再次插入“./lib”前缀;这使得它的行为与默认情况下python在当前路径中放置“.”的方式相同。对于tox,我们现在正在设置pythonnousersite标志。

    References: #3356

1.0.0b5

Released: April 3, 2015

orm

  • [orm] [bug]

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

    This change is also backported to: 0.9.10

    References: #3352

  • [orm] [bug]

    Query 使用时不支持join、subselect或special from子句 Query.update()Query.delete() 方法;如果方法 Query.join()Query.select_from() 已调用,引发错误。在0.9.10中,这只会发出警告。

    References: #3349

  • [orm] [bug]

    在会话的提交阶段中使用的弱字典周围添加了一个list()调用,如果没有它,如果垃圾收集在进程内交互,可能会导致“Dictionary Changed Size During ITER”错误。变更由3139引入。

  • [orm] [bug]

    修正了一个与“嵌套的”内部连接急切加载相关的错误,该错误也存在于0.9中,但由于 #3008 它默认启用“嵌套”,这样,当一系列内部/外部联接混合在一起时,使用inner join=true从公共祖先跨同级路径传输的连接的热切负载将正确地将每个“inner join”同级拼接到联接的适当部分。

    References: #3347

sql

  • [sql] [bug]

    非Unicode类型的Unicode类型发出的警告已被自由化,以警告那些甚至不是字符串值的值,例如整数;以前,1.0更新的警告系统使用了字符串格式设置操作,这将引发内部类型错误。虽然理想情况下这些情况应该完全引发,但一些后端(如sqlite和mysql)确实接受它们,并且可能正被遗留代码使用,更不用说,如果目标后端关闭Unicode转换,它们将始终通过。

    References: #3346

postgresql

  • [postgresql] [bug]

    修正了由于 #3184 会导致PostgreSQL 8.4及更低版本的索引操作失败。当使用旧版本的PostgreSQL时,这些增强功能现在被禁用。

    References: #3343

1.0.0b4

Released: March 29, 2015

sql

  • [sql] [bug]

    修复了新的“标签分辨率”功能中的错误 #2992 如果一个标签是匿名的,然后用名称再次标记,则无法通过文本标签定位。当映射的 column_property() 在查询中给出了显式标签。

    References: #3340

  • [sql] [bug]

    修复了新的“标签分辨率”功能中的错误 #2992 如果字符串标签按语句的_By()或group_By()的顺序放置,则该名称的优先级将高于FROM子句中的名称,而不是columns子句中更为本地可用的名称。

    References: #3335

schema

mysql

  • [mysql] [bug] [pymysql]

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

    This change is also backported to: 0.9.10

    References: #3337

mssql

  • [mssql] [bug] [firebird] [oracle] [sybase]

    关闭了mssql(Oracle方言)上的“简单排序方式”标志;这是根据 #2992 使列子句中的表达式ORDER BY或GROUP BY被标签复制,即使被引用为表达式对象也是如此。现在,MSSQL的行为是默认情况下复制整个表达式的旧行为,因为MSSQL可以对这些行为进行挑剔,尤其是在分组表达式中。对于火鸟方言和Sybase方言,也会关闭旗子进行防御。

    注解

    此解决方案不正确,请参阅1.0.2版了解此解决方案的修订。

    References: #3338

1.0.0b3

Released: March 20, 2015

mysql

  • [mysql] [bug]

    修复了无意中被注释掉的提交问题2771。

    References: #2771

1.0.0b2

Released: March 20, 2015

orm

  • [orm] [bug]

    修正了pullreq github的意外使用回归:137,其中py2k unicode文本(例如 u"" )不会被 relationship.cascade 选择权。拉请求礼遇朱利安卡斯特斯。

    References: #3327

orm declarative

  • [orm] [declarative] [change]

    放宽了一些限制 @declared_attr 对象,这样它们就不会在声明过程之外被调用;这与允许 @declared_attr 返回根据当前类进行配置时缓存的值。异常引发已被移除,并且行为已更改,因此在声明性进程之外,由 @declared_attr 每次都像平常一样打电话 @property ,而不使用任何缓存,因为在此阶段没有可用的缓存。

    References: #3331

engine

  • [engine] [bug]

    “自动关闭”用于 ResultProxy 现在是一个“软”接近。也就是说,在使用fetch方法耗尽所有行之后,DBAPI光标会像以前一样被释放,对象可能会被安全地丢弃,但是fetch方法可能会继续被调用,为此它们将返回一个结束结果对象(fetchone为none,fetchmany和fetch all为空列表)。只有 ResultProxy.close() 显式调用这些方法是否会引发“result is closed”错误。

    References: #3329, #3330

mysql

  • [mysql] [bug] [py3k]

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

    This change is also backported to: 0.9.10

    References: #3333

  • [mysql] [bug]

    修复以完全支持使用 'utf8mb4' mysql特有的字符集,使用mysql方言,特别是mysql python和pymysql。此外,报告更多异常字符集(如“koi8u”或“eucjpms”)的MySQL数据库也可以正常工作。托马斯格雷格提出请求。

    References: #2771

1.0.0b1

Released: March 13, 2015

版本1.0.0b1是1.0系列的第一个版本。这里描述的许多变化也出现在0.9中,有时也出现在0.8系列中。有关特定于1.0并强调兼容性问题的更改,请参见 SQLAlchemy 1.0有什么新功能? .

general

  • [general] [feature]

    结构内存的使用已经通过更显著地使用 __slots__ 对于许多内部对象。这种优化特别适用于具有大量表和列的大型应用程序的基本内存大小,并大大减少了各种大容量对象的内存大小,包括事件侦听内部构件、比较器对象以及ORM属性和加载程序策略系统的一部分。

  • [general] [bug]

    这个 __module__ 现在已经为所有派生为“公共工厂”符号的SQL和ORM函数设置了属性,这有助于文档工具能够报告目标模块。

    References: #3218

orm

  • [orm] [feature]

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

    This change is also backported to: 0.9.10

    References: #3320

  • [orm] [feature]

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

    参见

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

    This change is also backported to: 0.9.9

    References: #3296

  • [orm] [feature]

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

    This change is also backported to: 0.9.9

  • [orm] [feature]

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

    This change is also backported to: 0.9.5

    References: #3029

  • [orm] [feature]

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

    This change is also backported to: 0.9.5

    References: #3017

  • [orm] [feature]

    添加了新的活动套件 QueryEvents . 这个 QueryEvents.before_compile() 事件允许创建函数,这些函数可能会对 Query 在构造select语句之前的对象。希望通过一个新的检查系统的出现,使这一事件变得更加有用,该系统将允许对 Query 以自动化方式处理对象。

    参见

    QueryEvents

    References: #3317

  • [orm] [feature]

    在一对一关系(即一对多关系)的情况下,当联接的抢先加载与一对多查询一起使用时发生的子查询包装已被禁用。 relationship.uselist 设置为假。在这些情况下,这将产生更有效的查询。

    References: #3249

  • [orm] [feature]

    映射状态内部已经被重新处理,以允许对象“过期”特定的调用计数减少50%,如的“自动过期”功能中所述。 Session.commit() 为了 Session.expire_all() 以及在对象状态被垃圾收集时发生的“清理”步骤中。

    References: #3307

  • [orm] [feature]

    当同一多态标识分配给同一层次结构中的两个不同映射器时,将发出警告。这通常是一个用户错误,意味着在加载时无法正确区分两种不同的映射类型。拉请求由塞巴斯蒂安银行提供。

    References: #3262

  • [orm] [feature]

    一系列新的 Session 已经创建了直接在工作单元的设施中提供挂钩以发出插入和更新语句的方法。如果使用正确,这个面向专家的系统可以允许使用ORM映射来生成批量插入和更新批处理到ExecuteMany组中的语句,从而允许语句以与直接使用核心相媲美的速度继续运行。

    参见

    散装作业

    References: #3100

  • [orm] [feature]

    添加了一个参数 Query.join.isouter 这是呼叫的同义词 Query.outerjoin() ;此标志用于提供比核心更一致的接口 FromClause.join() . 拉车请求由Jonathan Vanasco提供。

    References: #3217

  • [orm] [feature]

    添加了新的事件处理程序 AttributeEvents.init_collection()AttributeEvents.dispose_collection() ,跟踪集合何时首次与实例关联以及何时被替换。这些处理程序取代 collection.linker() 注释。旧的钩子仍然通过事件适配器得到支持。

  • [orm] [feature]

    这个 Query 将在以下情况下引发异常 Query.yield_per() 与映射或选项一起使用,在这些映射或选项中,将发生子查询预加载或将预加载与集合联接。这些加载策略目前与yield_per不兼容,因此通过增加此错误,该方法更安全。可以通过禁用 lazyload('*') 选项或 Query.enable_eagerloads() .

  • [orm] [feature]

    的新实现 KeyedTuple 用于 Query 对象在获取大量面向列的行时提供了显著的速度改进。

    References: #3176

  • [orm] [feature]

    行为 joinedload.innerjoin 以及 relationship.innerjoin 现在将使用“嵌套的”内部联接,即右嵌套,作为内部联接联接的预加载链接到外部联接的预加载时的默认行为。

    References: #3008

  • [orm] [feature]

    更新语句现在可以在ORM flush中批处理到更高性能的executeMany()调用中,这与如何批处理insert语句类似;在flush中调用这一功能的程度是:同一映射和表的后续更新语句在values子句中涉及相同的列,而没有设置级别的SQL表达式。NS是嵌入的,映射的版本控制要求与后端方言返回ExecuteMany操作正确行数的能力兼容。

  • [orm] [feature]

    这个 info 参数已添加到的构造函数中 SynonymPropertyComparableProperty .

    References: #2963

  • [orm] [feature]

    这个 InspectionAttr.info 集合现在向下移动到 InspectionAttr ,除了在所有 MapperProperty 对象,当通过 Mapper.all_orm_descriptors .

    References: #2971

  • [orm] [change]

    标记为deferred而没有显式取消引用的映射属性现在将保持“deferred”,即使它们的列以某种方式存在于结果集中。这是一种性能增强,因为ORM负载在获得结果集时不再花时间搜索每个延迟的列。但是,对于一直依赖于此的应用程序,显式 undefer() 或者现在应该使用类似的选项。

  • [orm] [changed]

    这个 proc() Callable传递给 create_row_processor() 自定义方法 Bundle 类现在只接受一个“row”参数。

  • [orm] [changed]

    已删除不推荐使用的事件挂钩: populate_instancecreate_instancetranslate_rowappend_result

  • [orm] [bug]

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

    This change is also backported to: 0.9.5, 0.8.7

    References: #3055

  • [orm] [bug]

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

    This change is also backported to: 0.9.5, 0.8.7

    References: #3047

  • [orm] [bug]

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

    This change is also backported to: 0.9.9

    References: #3310

  • [orm] [bug]

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

    This change is also backported to: 0.9.9

    References: #3309

  • [orm] [bug]

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

    This change is also backported to: 0.9.9

  • [orm] [bug]

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

    This change is also backported to: 0.9.9

    References: #3300

  • [orm] [bug]

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

    This change is also backported to: 0.9.9

    References: #3287

  • [orm] [bug] [pypy]

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

    This change is also backported to: 0.9.9

    References: #3285

  • [orm] [bug]

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

    This change is also backported to: 0.9.9

    References: #3251

  • [orm] [bug] [sqlite]

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

    This change is also backported to: 0.9.9

    References: #3241

  • [orm] [bug]

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

    This change is also backported to: 0.9.9

    References: #3232

  • [orm] [bug] [engine]

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

    This change is also backported to: 0.9.8

    References: #3197

  • [orm] [bug]

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

    This change is also backported to: 0.9.8

    References: #3199

  • [orm] [bug]

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

    This change is also backported to: 0.9.8

    References: #3194

  • [orm] [bug] [eagerloading]

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

    This change is also backported to: 0.9.7

    References: #3131

  • [orm] [bug]

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

    This change is also backported to: 0.9.7

    References: #2736, #3083

  • [orm] [bug]

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

    This change is also backported to: 0.9.7

    References: #3108

  • [orm] [bug]

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

    This change is also backported to: 0.9.7

    References: #3106

  • [orm] [bug]

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

    This change is also backported to: 0.9.5

    References: #3042

  • [orm] [bug]

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

    This change is also backported to: 0.9.5

    References: #3080

  • [orm] [bug]

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

    注解

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

    This change is also backported to: 0.9.5

    References: #3060

  • [orm] [bug]

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

    This change is also backported to: 0.9.5

  • [orm] [bug]

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

    This change is also backported to: 0.9.5

    References: #3057

  • [orm] [bug] [sql]

    中新增强的布尔强制的修复。 #2804 “WHERE”和“HAVING”的新规则不会对“WHERE CLUSE”和“HAVING”的kw参数生效 select() 构造,这也是 Query 使用SO在ORM中也不起作用。

    This change is also backported to: 0.9.5

    References: #3013

  • [orm] [bug]

    修复了会话附加错误“对象已附加到会话X”的错误,如果在出现错误后继续执行,则无法阻止该对象也附加到新会话。

    References: #3301

  • [orm] [bug]

    初级 Mapper A的 Query 现在传递给 Session.get_bind() 调用时的方法 Query.count()Query.update()Query.delete() 以及对映射列的查询, column_property 对象,以及从映射列派生的SQL函数和表达式。这允许依赖于自定义的 Session.get_bind() 方案或“绑定”元数据可在所有相关情况下工作。

    References: #1326, #3227, #3242

  • [orm] [bug]

    这个 PropComparator.of_type() 修改器已与加载器指令(如 joinedload()contains_eager() 如果两个 PropComparator.of_type() 遇到相同基类型/路径的修饰符时,它们将合并为单个“多态”实体,而不是将类型A的实体替换为类型B的实体。例如,将 A.b.of_type(BSub1)->BSub1.c 结合接合载荷 A.b.of_type(BSub2)->BSub2.c 将创建一个 A.b.of_type((BSub1, BSub2)) -> BSub1.c, BSub2.c 不需要 with_polymorphic 在查询中显式显示。

    参见

    特异性或多态性亚型的热切加载 -包含说明新格式的更新示例。

    References: #3256

  • [orm] [bug]

    修复的支架 copy.deepcopy() 使用时调用 CascadeOptions 参数,如果 copy.deepcopy() 正在与一起使用 relationship() (不是官方支持的用例)。拉请求由Duesenfranz提供。

  • [orm] [bug]

    固定错误在哪里 Session.expunge() 如果对象被执行了刷新但未提交的删除操作,则不会完全分离给定的对象。这也会影响相关操作,如 make_transient() .

    References: #3139

  • [orm] [bug]

    如果有多个关系最终将填充与另一个关系冲突的外键列,而这些关系正试图从不同的源列复制值,则会发出警告。当具有重叠列的复合外键映射到每个引用不同列的关系时,就会发生这种情况。一个新的文档部分说明了这个例子,以及如何通过在每个关系的基础上指定“外部”列来克服这个问题。

    References: #3230

  • [orm] [bug]

    这个 Query.update() 方法现在将把给定值字典中的字符串键名转换为映射的属性名,而不更新映射的类。以前,字符串名称直接被接受并传递到core update语句,而不需要对映射的实体进行解析。支持同义词和混合属性作为 Query.update() 也支持。

    References: #3228

  • [orm] [bug]

    改进了 Session 要定位“绑定”(例如要使用的引擎),这样的引擎可以与mixin类、具体的子类以及更广泛的表元数据(如连接的继承表)相关联。

    References: #3035

  • [orm] [bug]

    修复了单表继承中的错误,其中包含同一个inh实体多次的连接链(通常会引发错误)在某些情况下可能隐式地为单个inh实体的第二个实例命名,从而生成一个“有效”的查询。但是,由于这种隐式别名不适用于单表继承的情况,因此它并没有完全“工作”,而且非常误导,因为它不会总是出现。

    References: #3233

  • [orm] [bug]

    使用时呈现的on子句 Query.join()Query.outerjoin() 或独立 join() / outerjoin() 单个继承子类的函数现在将在on子句中包含“单表条件”,即使on子句是手工滚动的;它现在使用and添加到条件中,就像使用relationship或类似的方式连接到单个表目标一样。

    这是一种介于特性和bug之间的方法。

    References: #3222

  • [orm] [bug]

    对表达式标签行为的主要修改,尤其是在与自定义SQL表达式的ColumnProperty构造以及0.9中首次引入的“按标签排序”逻辑一起使用时。修复包括 order_by(Entity.some_col_prop) 现在将使用“按标签排序”规则,即使实体受到别名的影响,也可以通过继承呈现或使用 aliased() 构造;使用别名多次呈现同一列属性(例如 query(Entity.some_prop, entity_alias.some_prop) )将用不同的标签标记实体的每一个实例,此外,“按标签排序”规则对两者都有效(例如 order_by(Entity.some_prop, entity_alias.some_prop) )其他可能阻止“按标签排序”逻辑在0.9中工作的问题,最显著的是标签的状态可能发生变化,从而“按标签排序”将根据调用的方式停止工作,已得到解决。

    References: #3148, #3188

  • [orm] [bug]

    在使用时更改了应用“单一继承标准”的方法 Query.from_self() 或其普通用户 Query.count() . 将行限制为具有特定类型的行的条件现在显示在内部子查询中,而不是外部子查询中,因此即使“type”列在columns子句中不可用,我们也可以在“inner”查询中对其进行筛选。

    References: #3177

  • [orm] [bug]

    对延迟加载的机制做了一个小调整,这样在对象指向自身的非常罕见的情况下,它就不太可能干扰joinLoad();在这种情况下,对象在加载属性时引用了自身,这会导致加载程序之间的混淆。不完全支持“对象指向其自身”的用例,但该修复还消除了一些开销,因此目前是测试的一部分。

    References: #3145

  • [orm] [bug]

    “复活”ORM事件已被删除。由于在0.8中删除了旧的“可变属性”系统,因此该事件挂钩没有任何作用。

    References: #3171

  • [orm] [bug]

    修复了属性“set”事件或列 @validates 如果这些列是“fetch and populate”操作的目标,例如自动增加的主键、python端默认值或通过返回“急切地”获取的服务器端默认值,则会在刷新过程中触发事件。

    References: #3167

  • [orm] [bug] [py3k]

    这个 IdentityMap 暴露于 Session.identity_map 现在返回的列表 items()values() 在py3k中,早期移植到py3k时,这里有这些返回的迭代器,在技术上它们应该是“可ITerable视图”。目前,列表还可以。

  • [orm] [bug]

    query.update()/delete()的“evaluator”不适用于多表更新,需要设置为 synchronize_session=Falsesynchronize_session='fetch' ;此时会引发异常,并显示一条消息来更改同步设置。这是从0.9.7发出的警告升级而来的。

    References: #3117

  • [orm] [enhancement]

    对属性机制的调整,涉及通过第一次访问将值隐式初始化为“无”的时间;此操作将不再执行此操作,因为此操作始终导致属性的填充;将返回“无”值,但基础属性不接收任何set事件。这与集合的工作方式是一致的,并且允许属性机制的行为更为一致;特别是,获取没有值的属性不会压扁如果该值实际设置为无,则应继续进行的事件。

    其中绑定的参数基于编译时选项以字符串的形式内联呈现。此功能由Dobes Vandermeer提供。

    References: #3061

orm declarative

  • [orm] [declarative] [feature]

    这个 declared_attr construct与声明性结合使用,有了新的改进的行为和特性。当调用时,修饰函数现在可以访问本地mixin上的最终列副本,并且对于每个映射类也可以调用一次,返回的结果将被memoize。一种新的修饰语 declared_attr.cascading 也添加了。

    References: #3150

  • [orm] [declarative] [bug]

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

    This change is also backported to: 0.9.8

    References: #3185

  • [orm] [declarative] [bug]

    修复了使用 __abstract__ 声明性继承层次结构中间的mixin将阻止属性和配置从基类正确传播到继承类。

    References: #3219, #3240

  • [orm] [declarative] [bug]

    与…建立关系 declared_attr 在一 AbstractConcreteBase 现在,除了像往常一样在后代的具体类上设置之外,还将在抽象基映射上自动配置基类。

    References: #2670

examples

  • [examples] [feature]

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

    This change is also backported to: 0.9.5

  • [examples] [feature]

    一组新的示例,致力于从多个角度详细研究SQLAlchemy ORM和Core以及DBAPI的性能。该套件在一个容器中运行,该容器通过控制台输出以及通过runsnake工具以图形方式提供内置的分析显示。

    参见

    性能

  • [examples] [bug]

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

    This change is also backported to: 0.9.9

  • [examples] [bug]

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

    This change is also backported to: 0.9.9

engine

  • [engine] [feature]

    增加了新的用户空间访问器,用于查看事务隔离级别; Connection.get_isolation_level()Connection.default_isolation_level .

    This change is also backported to: 0.9.9

  • [engine] [feature]

    新增事件 ConnectionEvents.handle_error() 更全面的功能替代 ConnectionEvents.dbapi_error() .

    This change is also backported to: 0.9.7

    References: #3076

  • [engine] [feature]

    可以发出一种新的警告样式,它将“过滤”参数化字符串的最多n次出现。这允许引用参数的参数化警告以固定的次数传递,直到允许python警告过滤器抑制它们,并防止内存在python的警告注册表中无限增长。

    References: #3178

  • [engine] [bug]

    固定错误 Connection 和游泳池 Connection.invalidate() 如果 isolation_level 参数已用于 Connection.execution_options() ;将在不再打开的连接上调用重置隔离级别的“终结器”。

    This change is also backported to: 0.9.9

    References: #3302

  • [engine] [bug]

    如果 isolation_level 参数用于 Connection.execution_options() 当A Transaction 正在运行;dbapis和/或sqlachemy方言(如psycopg2、mysqldb)可能隐式回滚或提交事务,或者在下一个事务之前不更改设置,因此这是不安全的。

    This change is also backported to: 0.9.9

    References: #3296

  • [engine] [bug]

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

    This change is also backported to: 0.9.8

    References: #3200

  • [engine] [bug]

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

    This change is also backported to: 0.9.8

    References: #3165

  • [engine] [bug]

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

    This change is also backported to: 0.9.5

    References: #3063

  • [engine] [bug]

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

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

    This change is also backported to: 0.9.5

    References: #3043

  • [engine] [bug]

    引擎级错误处理和包装例程现在将在所有引擎连接用例中生效,包括通过 create_engine.creator 参数,以及 Connection 在重新验证时遇到连接错误。

    References: #3266

  • [engine] [bug]

    在事件本身运行的同时,从侦听器内部或从并发线程中删除(或添加)事件侦听器,现在会引发RuntimeError,因为使用的集合现在是 collections.deque() 并且在迭代时不支持更改。以前,使用的是一个普通的python列表,从事件内部移除会导致无声失败。

    References: #3163

sql

  • [sql] [feature]

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

    This change is also backported to: 0.9.5

    References: #3028

  • [sql] [feature]

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

    This change is also backported to: 0.9.5

    References: #2990

  • [sql] [feature]

    SQL编译器现在生成所需列的映射,以便它们按位置而不是按名称与接收的结果集相匹配。最初,这被看作是一种处理返回列时难以预测名称的情况的方法,尽管在现代使用中,匿名标签已经克服了这个问题。在这个版本中,该方法基本上将每个结果的函数调用计数减少几十个调用,对于更大的结果列集,则减少更多。如果编译后的列集与接收到的列之间存在大小差异,则该方法仍然会退化为旧方法的现代版本,因此对于这些列表可能不排列的部分或完全文本编译场景来说,没有问题。

    References: #918

  • [sql] [feature]

    文本值位于 DefaultClause ,当使用 Column.server_default 参数现在将使用“内联”编译器呈现,以便它们呈现为原样,而不是作为绑定参数。

    References: #3087

  • [sql] [feature]

    当传递给SQL表达式单元的对象不能解释为SQL片段时,将报告表达式类型;pull请求由Ryan P.Kelly提供。

  • [sql] [feature]

    添加了一个新参数 Table.tometadata.nameTable.tometadata() 方法。类似 Table.tometadata.schema ,此参数导致新复制的 Table 接受新名称而不是现有名称。这增加了一个有趣的功能,即复制 Table 对象到 same MetaData 使用新名称作为目标。拉车请求由N.D.Parker提供。

  • [sql] [feature]

    异常消息有点溢出。如果没有,则不会显示SQL语句和参数,从而减少与语句无关的错误消息的混淆。将显示DBAPI级别异常的完整模块和类名,从而清楚地表明这是一个打包的DBAPI异常。语句和参数本身被限定在带括号的部分内,以便更好地将它们与错误消息以及彼此隔离。

    References: #3172

  • [sql] [feature]

    Insert.from_select() 如果未指定,现在包括python和sql表达式默认值;现在解除了从select插入时不包括非服务器列默认值的限制,并将这些表达式作为常量呈现到select语句中。

  • [sql] [feature]

    这个 UniqueConstraint 当反射一个 Table 对象,对于适用的数据库。为了以足够的准确性实现这一点,mysql和postgresql现在包含了能够在反映表、索引和约束时纠正索引重复和唯一约束的特性。对于MySQL,实际上没有独立于“唯一索引”的“唯一约束”概念,因此对于这个后端 UniqueConstraint 继续保持不在场 Table . 对于PostgreSQL,用于检测索引的查询 pg_index 已改进以检查 pg_constraint ,并且隐式构造的唯一索引不包含在 Table .

    在这两种情况下, Inspector.get_indexes() 以及 Inspector.get_unique_constraints() 方法分别返回两个构造,但包含一个新的标记 duplicates_constraint 如果是PostgreSQL或 duplicates_index 在mysql的情况下,指示何时检测到这种情况。拉请求由约翰内斯·埃尔德费尔特提供。

    References: #3184

  • [sql] [feature]

    添加了新方法 Select.with_statement_hint() ORM法 Query.with_statement_hint() 支持不特定于表的语句级提示。

    References: #3206

  • [sql] [feature]

    这个 info 参数已作为构造函数参数添加到所有架构构造中,包括 MetaDataIndexForeignKeyForeignKeyConstraintUniqueConstraintPrimaryKeyConstraintCheckConstraint .

    References: #2963

  • [sql] [feature]

    这个 Table.autoload_with 标志现在意味着 Table.autoload 应该是 True . 拉请求由马利克·迪亚拉提供。

    References: #3027

  • [sql] [feature]

    这个 Select.limit()Select.offset() 方法现在接受除整数值之外的任何SQL表达式作为参数。通常,这用于允许传递绑定参数,稍后可以用值替换该参数,从而允许对SQL查询进行Python端缓存。这里的实现完全向后兼容现有的第三方方言,但是那些实现特殊的限制/抵消系统的方言需要修改,以便利用新功能。限制和偏移也支持“文本绑定”模式,

    References: #3034

  • [sql] [changed]

    这个 column()table() 构造现在可以从“FromSQLAlchemy”名称空间导入,就像其他所有核心构造一样。

  • [sql] [changed]

    将字符串隐式转换为 text() 传递到的大多数生成器方法时构造 select() 以及 Query 现在只发送普通字符串就发出警告。然而,文本转换仍然正常进行。唯一接受没有警告的字符串的方法是“label reference”方法,如order_by()、group_by();这些函数现在将在编译时尝试将单个字符串参数解析为可选列或标签表达式中存在的列或标签表达式;如果未找到任何参数,则表达式仍会呈现,但会再次收到警告。这里的基本原理是,从字符串到文本的隐式转换比现在更出人意料,而且在传递原始字符串时,用户最好向core/orm发送更多的方向,以确定应该采取的方向。CORE/ORM教程已经更新,以便更深入地了解如何处理文本。

    References: #2992

  • [sql] [bug]

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

    This change is also backported to: 0.9.7, 0.8.7

    References: #3124

  • [sql] [bug]

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

    This change is also backported to: 0.9.7, 0.8.7

    References: #3102

  • [sql] [bug]

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

    This change is also backported to: 0.9.5, 0.8.7

    References: #3044

  • [sql] [bug]

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

    This change is also backported to: 0.9.5, 0.8.7

    References: #3045

  • [sql] [bug]

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

    This change is also backported to: 0.9.9

  • [sql] [bug]

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

    This change is also backported to: 0.9.9

    References: #3278

  • [sql] [bug]

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

    This change is also backported to: 0.9.9

    References: #3248

  • [sql] [bug]

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

    This change is also backported to: 0.9.8

    References: #3195

  • [sql] [bug]

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

    This change is also backported to: 0.9.8

    References: #3180

  • [sql] [bug]

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

    This change is also backported to: 0.9.8

    References: #3154

  • [sql] [bug]

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

    This change is also backported to: 0.9.8

    References: #3067, #3144

  • [sql] [bug]

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

    This change is also backported to: 0.9.7

    References: #3067

  • [sql] [bug]

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

    This change is also backported to: 0.9.7

    References: #3090

  • [sql] [bug]

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

    This change is also backported to: 0.9.7

    References: #3069

  • [sql] [bug]

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

    This change is also backported to: 0.9.7

    References: #3123

  • [sql] [bug]

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

    This change is also backported to: 0.9.7

    References: #3122

  • [sql] [bug]

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

    This change is also backported to: 0.9.5

    References: #3023

  • [sql] [bug]

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

    This change is also backported to: 0.9.5

    References: #3012

  • [sql] [bug]

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

    This change is also backported to: 0.9.5

    References: #3024

  • [sql] [bug]

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

    This change is also backported to: 0.9.5

    References: #1068, #3020

  • [sql] [bug]

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

    This change is also backported to: 0.9.5

  • [sql] [bug]

    多值版本 Insert.values() 已经修复,以便更有效地处理具有python-side默认值和/或函数以及服务器端默认值的表。该功能现在将使用使用“位置”参数的方言;也将为每行单独调用python可调用文件,就像“executemay”样式调用的情况一样;服务器端默认列将不再隐式接收为第一行显式指定的值,而是拒绝在没有显式值。

    References: #3288

  • [sql] [bug]

    固定错误 Table.tometadata() 方法,其中 CheckConstraintBooleanEnum 类型对象将在目标表中加倍。复制过程现在跟踪这个约束对象作为类型对象本地的生成。

    References: #3260

  • [sql] [bug]

    行为契约 ForeignKeyConstraint.columns 集合已保持一致;此属性现在是 ColumnCollection 与所有其他约束相同,并在约束与 Table .

    References: #3243

  • [sql] [bug]

    这个 Column.key 属性现在用作表达式中匿名绑定参数名称的源,以匹配在INSERT或UPDATE语句中呈现时该值作为键的现有使用。这允许 Column.key 要用作“替换”字符串,以解决无法很好地转换为绑定参数名的困难列名。请注意,可在 create_engine() 无论如何,现在大多数DBAPI都支持命名和位置样式。

    References: #3245

  • [sql] [bug]

    修复了 PoolEvents.reset.dbapi_connection 传递给此事件的参数;这尤其影响此事件的“命名”参数样式的使用。拉车请求由Jason Goldberger提供。

  • [sql] [bug]

    逆转了0.9中所做的改变,“常数”的“单态”性质 null()true()false() 已还原。这些返回“singleton”对象的函数的效果是,不管词汇用法如何,不同的实例都会被视为相同的实例,这尤其会影响select语句的columns子句的呈现。

    References: #3170

  • [sql] [bug] [engine]

    修复了一个“分支”连接的错误,这是您调用时得到的类型 Connection.connect() 不会与父级共享无效状态。分支的体系结构已经做了一些调整,以便分支连接在所有无效状态和操作上都服从于父级。

    References: #3215

  • [sql] [bug] [engine]

    修复了一个“分支”连接的错误,这是您调用时得到的类型 Connection.connect() ,不会与父级共享事务状态。分支的体系结构已经做了一些调整,以便分支连接在所有事务状态和操作上都服从于父级。

    References: #3190

  • [sql] [bug]

    使用 Insert.from_select() 现在暗示 inline=Trueinsert() . 这有助于修复这样一个错误:在支持后端,insert…from select构造无意中被编译为“隐式返回”,在插入零行(隐式返回需要行)的情况下,这将导致中断;在插入多行(例如,插入)的情况下,这将导致任意返回数据。只有第一排)。类似的更改也应用于具有多个参数集的insert..values;隐式返回也不再为此语句发出。由于这两个结构都处理可变行数,因此 ResultProxy.inserted_primary_key 访问器不适用。以前,有一个文档说明,人们可能更喜欢 inline=True 由于某些数据库不支持返回,因此不能执行“隐式”返回,因此使用insert..from select,但在任何情况下,insert…from select都不需要隐式返回。正则显式 Insert.returning() 如果需要插入数据,则应用于返回结果行的可变数目。

    References: #3169

  • [sql] [enhancement]

    实现的自定义方言 GenericTypeCompiler 现在可以构造为访问方法接收所属表达式对象(如果有)的指示。接受关键字参数的任何访问方法(例如 **kw )在大多数情况下,将接收关键字参数 type_expression ,引用类型包含在其中的表达式对象。对于DDL中的列,方言的编译器类可能需要更改其 get_column_specification() 方法来支持这一点。这个 UserDefinedType.get_col_spec() 方法也将接收 type_expression 如果它提供 **kw 在其参数签名中。

    References: #3074

schema

postgresql

  • [postgresql] [feature]

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

    This change is also backported to: 0.9.9

  • [postgresql] [feature] [pg8000]

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

    This change is also backported to: 0.9.8

  • [postgresql] [feature]

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

    This change is also backported to: 0.9.7

    References: #3078

  • [postgresql] [feature]

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

    This change is also backported to: 0.9.7

  • [postgresql] [feature]

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

    This change is also backported to: 0.9.5

  • [postgresql] [feature]

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

    This change is also backported to: 0.9.5

    References: #2785

  • [postgresql] [feature]

    PG8000方言现在支持 create_engine.encoding 参数,通过在连接上设置客户端编码,然后由pg8000拦截。托尼洛克的请求。

  • [postgresql] [feature]

    增加了对PG8000本机JSONB功能的支持。托尼洛克的请求。

  • [postgresql] [feature] [pypy]

    在Pypy上添加了对psycopg2cffi dbapi的支持。拉请求,由Shauns提供。

    References: #3052

  • [postgresql] [feature]

    在PostgreSQL 9.4支持的聚合函数中添加了对filter关键字的支持。拉请求由Ilja Everil_

  • [postgresql] [feature]

    增加了对物化视图和外部表的反射的支持,以及对内部物化视图的支持。 Inspector.get_view_names() 和一种新的方法 PGInspector.get_foreign_table_names() 在的PostgreSQL版本上可用 Inspector . 拉请求由Rodrigo Menezes提供。

    References: #2891

  • [postgresql] [feature]

    添加了对pg table options表空间、on commit、with(out)oid和inherits的支持,当通过 Table 构建。拉请求由Malikdiarra提供。

    References: #2051

  • [postgresql] [feature]

    添加了新方法 PGInspector.get_enums() ,使用postgresql的inspector时,将提供枚举类型的列表。拉请求由Ilya Pekelny提供。

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.5, 0.8.7

    References: #3053

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.5, 0.8.7

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.9

    References: #2940

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.9

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.9

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.9

    References: #3174

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.8

    References: #3021

  • [postgresql] [bug]

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

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

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

    对于psycopg2以外的dbapi(即pg8000),也修复了NULL as None的检索。

    This change is also backported to: 0.9.8

    References: #3159

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.8

    References: #3075

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.8

    References: #3141

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.8

    References: #3137

  • [postgresql] [bug] [pg8000]

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

    This change is also backported to: 0.9.7

    References: #3134

  • [postgresql] [bug]

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

    This change is also backported to: 0.9.5

    References: #3021

  • [postgresql] [bug]

    邮报 ENUM 当一个普通的 table.drop() 如果对象没有直接与 MetaData 对象。为了适应在多个表之间共享的枚举类型的用例,该类型应该直接与 MetaData 对象;在这种情况下,类型将只在元数据级别创建,或者直接创建。PostgreSQL枚举类型的创建/删除规则一般都被高度改写。

    References: #3319

  • [postgresql] [bug]

    这个 PGDialect.has_table() 方法现在将查询 pg_catalog.pg_table_is_visible(c.oid) 而不是在模式名称为“无”时测试精确的模式匹配;这样,该方法还可以说明存在临时表。请注意,这是一个行为更改,因为PostgreSQL允许非临时表以静默方式覆盖同名的现有临时表,因此这会更改 checkfirst 在那种不寻常的情况下。

    References: #3264

  • [postgresql] [enhancement]

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

    This change is also backported to: 0.9.5

    References: #3002

mysql

  • [mysql] [feature]

    MySQL方言现在在所有情况下都将时间戳呈现为空/非空,因此MySQL5.6.6 explicit_defaults_for_timestamp 启用标志将允许时间戳在以下情况下继续工作: nullable=False . 现有应用程序不受影响,因为对于时间戳列,sqlAlchemy始终发出空值 nullable=True .

    References: #3155

  • [mysql] [feature]

    更新了python 2下mysqldb和pymysql的“支持unicode语句”标志为true。这指的是SQL语句本身,而不是参数,并影响使用非ASCII字符的表名和列名等问题。这些驱动程序似乎都支持现代版本中没有问题的python 2 unicode对象。

    References: #3121

  • [mysql] [change]

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

    This change is also backported to: 0.9.9

    References: #3275

  • [mysql] [bug]

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

    This change is also backported to: 0.9.7, 0.8.7

    References: #3101

  • [mysql] [bug]

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

    This change is also backported to: 0.9.5, 0.8.7

    References: #3085

  • [mysql] [bug]

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

    This change is also backported to: 0.9.5, 0.8.7

  • [mysql] [bug]

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

    This change is also backported to: 0.9.9

    References: #3274

  • [mysql] [bug] [mysqlconnector]

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

    This change is also backported to: 0.9.8

  • [mysql] [bug] [mysqlconnector]

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

    This change is also backported to: 0.9.8

  • [mysql] [bug]

    MySQL方言现在支持构造为 TypeDecorator 物体。

  • [mysql] [bug]

    cast() 在MySQL不支持强制转换的类型上与MySQL方言一起使用;MySQL只支持在数据类型的子集上强制转换。对于mysql,sqlAlchemy已经长时间忽略了不支持类型的强制转换。虽然我们现在不想改变这一点,但我们发出了一个警告,表明它已经发生了。当一个强制转换与一个完全不支持强制转换的旧MySQL版本(<4)一起使用时,也会发出警告,在本例中,它也会被跳过。

    References: #3237

  • [mysql] [bug]

    这个 SET 类型已被大修,不再假定空字符串或具有单个空字符串值的集实际上是具有单个空字符串的集;相反,在默认情况下,它被视为空集。为了处理 SET 实际上要包括空白值 '' 作为合法值,添加了一个新的位操作模式,该模式由 SET.retrieve_as_bitwise 标志,它将使用其位标志定位明确地持久化和检索值。对于不以本机方式转换Unicode的驱动程序配置,也修复了Unicode值的存储和检索。

    References: #3283

  • [mysql] [bug]

    这个 ColumnOperators.match() 运算符现在的处理方式是,返回类型不严格假定为布尔型;它现在返回 Boolean 子类称为 MatchType . 当在Python表达式中使用时,该类型仍将生成布尔行为,但是方言可以在结果时重写其行为。对于mysql,虽然match运算符通常用于表达式中的布尔上下文,但如果实际查询匹配表达式的值,则返回浮点值;该值与sqlachemy基于c的布尔处理器不兼容,因此mysql的结果集行为现在遵循 Float 类型。新的operator对象 notmatch_op 还可以添加到更好地允许方言定义匹配操作的否定。

    References: #3263

  • [mysql] [bug]

    MySQL布尔符号“真”、“假”再次起作用。0.9的变化 #2682 不允许MySQL方言在“is”/“is not”上下文中使用“true”和“false”符号,但MySQL支持这种语法,即使它没有布尔类型。mysql仍然是“非本机布尔”,但是 true()false() 符号再次产生关键字“真”和“假”,使表达式像 column.is_(true()) 同样适用于MySQL。

    References: #3186

  • [mysql] [bug]

    MySQL方言现在将禁用 ConnectionEvents.handle_error() 从内部触发用于检测表是否存在的那些语句的事件。这是通过使用执行选项实现的 skip_user_error_events 为该执行的范围禁用句柄错误事件。通过这种方式,重写异常的用户代码不需要担心MySQL方言或其他偶尔需要捕获特定于sqlAlchemy的异常的方言。

  • [mysql] [bug]

    已将mysqlconnector的默认值“raise_on_warnings”更改为false。出于某种原因,这被设为真。不幸的是,“buffered”标志必须保持为true,因为mysqlconnector不允许关闭光标,除非完全获取所有结果。

    References: #2515

sqlite

  • [sqlite] [feature]

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

    参见

    部分指标

    This change is also backported to: 0.9.9

  • [sqlite] [feature]

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

    参见

    pysqlcipher

    This change is also backported to: 0.9.9

  • [sqlite] [bug]

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

    This change is also backported to: 0.9.8

    References: #3211

  • [sqlite] [bug]

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

    This change is also backported to: 0.9.7

    References: #3130

  • [sqlite] [bug]

    唯一和外键约束现在完全反映在sqlite上,包括名称和不名称。以前,忽略了外键名,跳过了未命名的唯一约束。感谢Jon Nelson的帮助。

    References: #3244, #3261

  • [sqlite] [bug]

    当使用 DATETIMEDATETIME 类型,并给出 storage_format 只呈现数字的,将DDL中的类型呈现为 DATE_CHARTIME_CHARDATETIME_CHAR 因此,尽管值中缺少字母字符,列仍将传递“文本相关性”。通常不需要这样做,因为默认存储格式中的文本值已经暗示了文本。

    References: #3257

  • [sqlite] [bug]

    现在,sqlite支持从临时表反射唯一约束;以前,这将失败,并出现类型错误。拉请求由约翰内斯·埃尔德费尔特提供。

    参见

    对于临时表/视图名称报告,sqlite/oracle有不同的方法 -有关SQLite临时表和视图反射的更改。

    References: #3203

  • [sqlite] [bug]

    补充 Inspector.get_temp_table_names()Inspector.get_temp_view_names() ;目前,只有SQLite和Oracle方言支持这些方法。已返回临时表和视图名称 远离的 来自sqlite和Oracle版本的 Inspector.get_table_names()Inspector.get_view_names() ;其他数据库后端无法支持此信息(如mysql),并且操作范围不同,因为表可以是会话的本地表,通常在远程架构中不受支持。

    References: #3204

mssql

  • [mssql] [feature]

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

    This change is also backported to: 0.9.7

  • [mssql] [feature]

    现在,SQL Server 2012建议对大文本/二进制类型使用varchar(max)、nvarchar(max)、varbinary(max)。现在,MSSQL方言将基于版本检测和新的 deprecate_large_types 旗帜。

    References: #3039

  • [mssql] [changed]

    使用pyodbc时,基于主机名的SQL Server连接格式将不再指定默认的“驱动程序名称”,如果缺少该名称,将发出警告。SQL Server的最佳驱动程序名称经常更改,并且是每个平台的,因此基于主机名的连接需要指定此名称。首选基于DSN的连接。

    References: #3182

  • [mssql] [bug]

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

    This change is also backported to: 0.9.7, 0.8.7

  • [mssql] [bug]

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

    This change is also backported to: 0.9.7, 0.8.7

    References: #3091

  • [mssql] [bug]

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

    This change is also backported to: 0.9.8

    References: #3151

  • [mssql] [bug]

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

    This change is also backported to: 0.9.5

    References: #3025

oracle

  • [oracle] [feature]

    通过传递 ?service_name=<name> 指向URL。拉式请求由S_a女士提供。

  • [oracle] [feature]

    新的Oracle DDL功能表,索引:压缩,位图。盖博·冈巴斯提供的补丁。

  • [oracle] [feature]

    增加了对Oracle下CTE的支持。这包括对别名语法的一些调整,以及一个新的CTE特性。 CTE.suffix_with() 这对于向CTE添加特定于Oracle的特殊指令非常有用。

    References: #3220

  • [oracle] [feature]

    在提交时添加了对Oracle表选项的支持。

  • [oracle] [bug]

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

    This change is also backported to: 0.9.8

    References: #2138

  • [oracle] [bug] [tests]

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

    This change is also backported to: 0.9.7

    References: #3128

  • [oracle] [bug]

    当使用 %(name)s 内的令牌 Select.with_hint() 方法。以前,Oracle后端没有实现这种引用。

misc

  • [feature] [ext]

    添加了新的扩展套件 sqlalchemy.ext.baked . 这个简单但不寻常的系统为构建和处理ORM节省了大量的python开销。 Query 对象,从查询构造到字符串SQL语句的呈现。

    参见

    烘焙查询

    References: #3054

  • [feature] [ext]

    这个 sqlalchemy.ext.automap 现在将设置扩展名 cascade="all, delete-orphan" 在一对多关系/backref上自动执行,其中检测到外键包含一个或多个不可为空的列。此参数存在于传递给的关键字中 generate_relationship() 在这种情况下,仍然可以重写。此外,如果 ForeignKeyConstraint 指定 ondelete="CASCADE" 对于不可以为空的或 ondelete="SET NULL" 对于可以为空的列集,参数 passive_deletes=True 也添加到关系中。注意,不是所有的后端都支持OnDelete的反射,而是包含PostgreSQL和MySQL的后端。

    References: #3210

  • [bug] [declarative]

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

    This change is also backported to: 0.9.5, 0.8.7

    References: #3062

  • [bug] [ext]

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

    This change is also backported to: 0.9.5, 0.8.7

    References: #3051, #3093

  • [bug] [ext]

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

    This change is also backported to: 0.9.5, 0.8.7

    References: #3051, #3093

  • [bug] [ext] [py3k]

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

    This change is also backported to: 0.9.9

  • [bug] [declarative]

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

    This change is also backported to: 0.9.8

    References: #3208

  • [bug] [ext]

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

    This change is also backported to: 0.9.8

    References: #3191

  • [bug] [ext]

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

    This change is also backported to: 0.9.8

  • [bug] [ext]

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

    This change is also backported to: 0.9.8

  • [bug] [pool]

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

    This change is also backported to: 0.9.8

    References: #3168

  • [bug] [tests]

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

    This change is also backported to: 0.9.7

  • [bug] [declarative]

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

    This change is also backported to: 0.9.7

    References: #3097

  • [bug] [testsuite]

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

    This change is also backported to: 0.9.5

  • [bug] [py3k] [tests]

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

    This change is also backported to: 0.9.5

    References: #2830

  • [removed]

    细雨方言已从核心中删除;现在可作为 sqlalchemy-drizzle 一种独立的第三方方言。方言仍然几乎完全基于SQLAlchemy中的MySQL方言。

Previous: 1.1换热器 Next: 0.9换热器