SqlAlchemy 2.0 中文文档(六十一)(1)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS SQL Server,基础系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: SqlAlchemy 2.0 中文文档(六十一)


原文:docs.sqlalchemy.org/en/20/contents.html

1.2 更新日志

原文:docs.sqlalchemy.org/en/20/changelog/changelog_12.html

1.2.19

发布日期:2019 年 4 月 15 日

orm

  • [orm] [bug]
    修复了 1.2 版本中由于为关系懒加载器引入烘焙查询而导致的回归,其中在生成“懒惰子句”时创建了竞争条件,该条件发生在一个被记忆的属性内。如果两个线程同时初始化被记忆的属性,则烘焙查询可能会生成带有绑定参数键的查询,然后在下一次运行时用新键替换,导致懒加载查询将相关条件指定为None。修复确保在生成新子句和参数对象之前固定参数名称,以便每次名称都相同。
    参考:#4507

示例

  • [示例] [bug]
    修复了大结果集示例中的 bug,由于代码重排导致“id”变量重新命名,导致测试失败。感谢 Matt Schuchhardt 提供的拉取请求。
    参考:#4528

engine

  • [engine] [bug]
    使用__eq__()比较两个URL对象时未考虑端口号,只有端口号不同的两个对象被视为相等。现在在URL__eq__()方法中添加了端口比较,端口号不同的对象现在不相等。此外,URL未实现__ne__(),导致在 Python2 中使用!=时出现意外结果,因为在 Python2 中比较运算符之间没有暗示的关系。
    参考:#4406

mssql

  • [mssql] [bug]
    在将隔离级别更改为 SNAPSHOT 后会发出一个 commit(),因为 pyodbc 和 pymssql 都会打开一个隐式事务,这会阻止当前事务中发出后续的 SQL。
    参考:#4536

oracle

  • [oracle] [bug]
    增加了对 Oracle 方言反射NCHAR数据类型的支持,并将NCHAR添加到 Oracle 方言导出的类型列表中。
    参考:#4506

1.2.18

发布日期:2019 年 2 月 15 日

orm

  • [orm] [bug]
    修复了 1.2  版本中的一个回归问题,即通配符/load_only 加载器选项在加载路径中使用  of_type()限制到特定子类时无法正常工作。修复目前仅适用于简单子类的 of_type(),而不适用于将在单独问题中解决的  with_polymorphic 实体;这种后一种情况以前可能不起作用。
    参考:#4468
  • [orm] [bug]
    修复了一个相当简单但关键的问题,即SessionEvents.pending_to_persistent()事件不仅在对象从待定转为持久时被调用,而且在它们已经是持久的并且正在更新时也被调用,从而导致事件在每次更新时为所有对象调用。
    参考:#4489

sql

  • [sql] [bug]
    修复了JSON类型具有只读JSON.should_evaluate_none属性的问题,这会导致在与此类型一起使用TypeEngine.evaluates_none()方法时出现故障。感谢 Sanjana S 提交的拉取请求。
    参考:#4485

mysql

  • [mysql] [bug]
    修复了由#4344引起的第二个回归问题(第一个是#4361),这是针对 MySQL 问题 88718 的解决方案,其中使用的小写函数对于具有 Python 2 的 OSX/Windows 大小写约定不正确,这将引发TypeError。已对此逻辑添加了完整覆盖,以便以模拟样式在所有 Python 版本的所有三种大小写约定上执行每个代码路径。与此同时,MySQL 8.0 已经修复了问题 88718,因此这个解决方案仅适用于特定范围的 MySQL 8.0 版本。
    参考:#4492

sqlite

  • [sqlite] [bug]
    修复了在 SQLite DDL 中的一个 bug,其中将表达式用作服务器端默认值需要将其包含在括号中才能被 sqlite 解析器接受。感谢 Bartlomiej Biernacki 提交的拉取请求。
    参考:#4474

mssql

  • [mssql] [bug]
    修复了一个错误,即 SQL Server 中允许在 IDENTITY 列上使用明确值进行插入的“IDENTITY_INSERT”逻辑未检测到使用字典的情况,该字典包含Insert.values()作为键和 SQL 表达式作为值的Column
    参考:#4499

1.2.17

发布日期:2019 年 1 月 25 日

orm

  • [orm] [feature]
    添加了新的事件钩子QueryEvents.before_compile_update()QueryEvents.before_compile_delete(),它们在Query.update()Query.delete()方法的情况下补充了QueryEvents.before_compile()
    参考:#4461
  • [orm] [bug]
    修复了单表继承与使用“with polymorphic”加载的连接继承层次结构一起使用时,“单表条件”可能会被混淆为同一查询中使用的同一层次结构的其他实体的问题。将“单表条件”的适应性更具体地改为目标实体,以避免它意外地适应为查询中的其他表。
    参考:#4454

postgresql

  • [postgresql] [bug]
    修订了在反射 CHECK 约束时使用的查询,以利用pg_get_constraintdef函数,因为consrc列在 PG 12 中已被弃用。感谢约翰·A·斯蒂文森的提示。
    参考:#4463

oracle

  • [oracle] [bug]
    由于 1.2 版本中 cx_Oracle  方言的重构导致整数精度逻辑的回归。现在我们不再将 cx_Oracle.NATIVE_INT 类型应用于发送整数值的结果列(检测到为正精度且比例为  0),这会导致超出 32 位边界的值发生整数溢出问题。相反,输出变量保持未分类,以便 cx_Oracle 可以选择最佳选项。
    参考:#4457

1.2.16

发布日期:2019 年 1 月 11 日

引擎

  • [engine] [bug]
    修复了在版本 1.2 中引入的回归,其中对SQLAlchemyError基本异常类的重构引入了一个不当的强制转换,将纯字符串消息转换为 Unicode 在 python 2k 下,这不被 Python 解释器处理,因为平台的编码(通常是 ascii)之外的字符。SQLAlchemyError类现在在 Py2K 下通过__str__()传递一个字节串,这是 Py2K 下异常对象的一般行为,对于__unicode__()进行安全的 utf-8 强制转换。对于 Py3K,消息通常已经是 unicode,但如果不是,__str__()方法会再次进行安全的 utf-8 强制转换。
    参考:#4429

sql

  • [sql] [bug] [mysql] [oracle]
    修复了为DropTableComment发出的 DDL 对于即将用于 Alembic 的新版本的 MySQL 和 Oracle 数据库是不正确的问题。
    参考:#4436

postgresql

  • [postgresql] [bug]
    修复了在远程模式中存在的ENUM或自定义域在列反射中无法识别的问题,如果枚举/域的名称或模式的名称需要引号。现在,新的解析方案完全解析带引号或不带引号的标记,包括支持 SQL 转义引号。
    参考:#4416
  • [postgresql] [bug]
    修复了同一MetaData对象引用的多个ENUM对象在具有相同名称但不同模式名称的情况下无法创建的问题。PostgreSQL 方言在 DDL 创建序列期间用于跟踪是否在数据库中创建了特定ENUM的内部记忆现在考虑了模式名称。

sqlite

  • [sqlite] [bug]
    基于 SQL 表达式的索引的反射现在会跳过并发出警告,与 Postgresql 方言的方式相同,我们目前不支持反映其中包含 SQL 表达式的索引。以前,会生成具有 None 列的索引,这会破坏像 Alembic 这样的工具。
    参考:#4431

杂项

  • [no_tags]
    修复了“扩展 IN”功能中的问题,即在查询中多次使用相同的绑定参数名称会导致在重写查询中的参数时出现 KeyError 的问题。
    参考:#4394

1.2.15

发布日期:2018 年 12 月 11 日

orm

  • [orm] [bug]
    修复了当在声明映射中使用ForeignKey(SomeClass.id)模式时,ORM 注释可能不正确的 bug。这种模式会将不需要的注释泄漏到加入条件中,这可能会破坏Query中进行的别名操作,这些操作不应影响该加入条件中的元素。如果存在这些注释,现在会立即将其删除。
    参考:#4367
  • [orm] [bug]
    继续解决与最近#4349类似主题的问题,修复了Comparator.any()Comparator.has()中的问题,其中“secondary”可选择需要明确作为 FROM 子查询的一部分,以适应“secondary”是Join对象的情况。
    参考:#4366
  • [orm] [bug]
    修复了由#4349引起的回归问题,即将“secondary”表添加到动态加载器的 FROM 子句中会影响Query对另一个实体进行后续连接的能力。修复方法是将主实体添加为 FROM 列表的第一个元素,因为Query.join()希望从那里跳转。版本 1.3 还将对此问题提供更全面的解决方案(#4365)。
    参考:#4363
  • [orm] [bug]
    修复了一个 bug,即在使用RelationshipProperty.of_type()链接映射器选项时,与仅通过字符串引用属性名称的链接选项一起使用时,会无法定位属性的问题。
    参考:#4400

orm declarative

  • [orm] [declarative] [bug]
    在将column()对象应用于声明类的情况下,会发出警告,因为这似乎是打算将其作为Column对象。
    参考:#4374

杂项

  • [no_tags]
    添加了对write_timeout标志的支持,该标志被 mysqlclient 和 pymysql 接受并传递到 URL 字符串中。
    参考:#4381
  • [no_tags]
    修复了一个问题,即无法识别表示为数组的 PostgreSQL 域的反射。感谢 Jakub Synowiec 提供的拉取请求。
    参考:#4377, #4380

1.2.14

发布日期:2018 年 11 月 10 日

orm

  • [orm] [bug]
    修复了Session.bulk_update_mappings()中的 bug,其中替代映射属性名称会导致 UPDATE 语句的主键列包含在 SET 子句中,以及 WHERE 子句中;虽然通常无害,但对于 SQL Server,这可能会由于 IDENTITY 列而引发错误。这是在#3849中修复的相同 bug 的延续,测试不足以捕捉到这个额外的缺陷。
    参考:#4357
  • [orm] [bug]
    修复了一个轻微的性能问题,可能会在某些情况下增加不必要的开销,涉及在查询中同时使用 ORM 列和包含这些列的实体时。问题涉及在不同方式引用列时的哈希/相等开销。
    参考:#4347

mysql

  • [mysql] [bug]
    修复了 1.2.13 中发布的#4344引起的回归问题,其中解决了 MySQL 8.0 在反射外键引用列名称时的大小写敏感性问题,使用information_schema.columns视图绕过。在 OSX / lower_case_table_names=2上,这种解决方法会失败,因为information_schema.columns的大小写与SHOW CREATE TABLE不匹配,因此在不区分大小写的 SQL 模式下现在使用不区分大小写的匹配。
    参考:#4361

1.2.13

发布日期:2018 年 10 月 31 日

orm

  • [orm] [bug]
    修复了“动态”加载器需要在查询的 FROM 子句中显式设置“secondary”表的 bug,以适应次要表是一个联接对象,否则仅从其列中提取无法将其拉入查询的情况。
    参考:#4349

orm 声明式

  • [orm] [declarative] [bug]
    修复了版本 1.2.12 中由#4326引起的回归,其中在使用declared_attrsynonym()混合使用时,会导致无法正确将同义词映射到继承的子类。
    参考:#4350
  • [orm] [declarative] [bug]
    现在,讨论的列冲突解决技术使用use_existing_column解决列冲突对于同时是主键列的Column现在可用。以前,在允许列复制通过之前,会先检查单一继承子类上声明的主键列。
    参考:#4352

sql

  • [sql] [feature]
    重构SQLCompiler以公开类似于SQLCompiler.order_by_clause()SQLCompiler.limit_clause()方法的SQLCompiler.group_by_clause()方法,可以被方言重写以自定义 GROUP BY 的呈现方式。感谢 Samuel Chou 的拉取请求。
  • [sql] [bug]
    修复了Enum数据类型上的Enum.create_constraint标志不会传播到类型的副本的错误,这会影响到声明性混合和抽象基类等用例。
    参考:#4341

postgresql

  • [postgresql] [bug]
    增加了对aggregate_order_by函数接收多个 ORDER BY 元素的支持,之前只接受单个元素。
    参考:#4337

mysql

  • [mysql] [bug]
    function一词添加到 MySQL 的保留字列表中,现在在 MySQL 8.0 中是一个关键字。
    参考:#4348
  • [mysql] [bug]
    为 MySQL 8.0 系列中引入的一个 bug #88718 添加了一个解决方法,其中外键约束的反射未报告所引用列的正确大小写敏感性,导致在使用反射约束时出现错误,例如在使用 automap 扩展时。解决方法通过向 information_schema 表发出额外查询以检索正确的大小写敏感名称。
    参考:#4344

杂项

  • [杂项] [错误]
    修复了实用语言助手内部的一部分错误,该错误将错误类型的参数传递给 Python __import__内置函数作为要导入的模块列表。该问题在核心库中没有产生任何症状,但可能会导致重新定义__import__内置函数或以其他方式对其进行调整的外部应用程序出现问题。感谢 Joe Urciuoli 的拉取请求。
  • [杂项] [错误] [py3k]
    修复了由于 Python 3.7 中 Python collectionscollections.abc包组织变化而产生的额外警告。之前版本 1.2.11 中已修复了collections的警告。感谢 xtreak 的拉取请求。
    参考:#4339
  • [错误] [扩展]
    在关联代理扩展中的基于列表的关联集合中添加了缺失的.index()方法。

1.2.12

发布日期:2018 年 9 月 19 日

ORM

  • [ORM] [错误]
    在弱引用清理中添加了一个检查,用于检查InstanceState对象中是否存在dict内置对象,以减少在解释器关闭时发生这些清理时生成的错误消息。感谢 Romuald Brunet 的拉取请求。
  • [ORM] [错误]
    修复了在与Query.join()以及Query.select_entity_from()一起使用Lateral构造时,不会将子句适应到连接的右侧的 bug。 “lateral”引入了连接的右侧可以相关的用例。以前,未考虑适应此子句。请注意,在 1.2 版本中,由Query.subquery()引入的可选择项仍未适应,原因是#4304;可选择项需要由select()函数生成,以成为“lateral”连接的右侧。
    参考:#4334
  • [ORM] [错误]
    修复了 1.2 版本中由 #3472 引起的回归问题,其中在后续更新操作的上下文中处理“updated_at”样式列也会发生在更新后要删除的行上,这意味着具有 Python  端值生成器的列将显示在更新之前发出的现已删除值(这不是以前的行为),以及 SQL  发出的值生成器将使属性过期,这意味着由于行已被删除并且对象已从会话中分离,无法访问以前的值。作为 #3472 的一部分添加的“postfetch”逻辑现在完全跳过将最终被删除的对象。
    参考:#4327

orm 声明式

  • [orm] [declarative] [bug]
    修复了一个 bug,其中对已映射类的子类上使用 @declared_attr 可调用时,属性的声明性扫描会收到由混合属性在类级别传递的表达式代理,而不是混合属性本身。这将导致在 Mapper.all_orm_descriptors 中查看时,未报告自身为混合的属性。
    参考:#4326

postgresql

  • [postgresql] [bug]
    修复了 PostgreSQL 方言中的一个 bug,其中编译器关键字参数(如 literal_binds=True)未被传播到 DISTINCT ON 表达式。
    参考:#4325
  • [postgresql] [bug]
    修复了 array_agg() 函数,这是通常 array_agg() 函数的略微改变版本,也接受一个传入的“type”参数,而不需要强制在其周围使用 ARRAY,本质上与 1.1 版本中修复的通用函数相同 #4107
    参考:#4324
  • [postgresql] [bug]
    修复了 PostgreSQL 枚举反射中的 bug,其中包含引号的区分大小写名称将由查询报告,这些引号在表反射期间不会与目标列匹配,因为需要去除引号。
    参考:#4323

oracle

  • [oracle] [bug]
    为 cx_Oracle 7.0  修复了一个问题,其中 Oracle param.getvalue() 的行为现在返回一个列表,而不是单个标量值,从而在 Core 和 ORM  中破坏了自增逻辑。 dml_ret_array_val 兼容性标志用于 cx_Oracle 6.3 和 6.4,以建立与 7.0  及更高版本的兼容性行为,对于 cx_Oracle 6.2.1 及之前的版本号检查,将退回到旧逻辑。
    参考:#4335

其他

  • [bug] [ext]
    修复了BakedQuery 没有将 Session 使用的具体查询类作为缓存键的一部分,导致在使用自定义查询类时出现不兼容性,特别是 ShardedQuery 其具有一些不同的参数签名。
    参考:#4328

1.2.11

发布日期:2018 年 8 月 20 日

orm 声明式

  • [orm] [declarative] [bug]
    修复了先前未经测试的用例中的问题,允许声明式映射的类继承自声明式基类之外的经典映射类,包括它适应于未映射的中间类的情况。 未映射的中间类可以指定 __abstract__,现在将正确解释,或者中间类可以保持未标记状态,并且基类将在层次结构中被正确检测到。 为了预期可能将经典映射混合到现有声明式层次结构中的现有场景,如果检测到给定类的多个映射基类,现在将引发错误。
    参考:#4321

sql

  • [sql] [bug]
    修复了一个与 #3639 密切相关的问题,即在非原生布尔后端的布尔上下文中呈现的表达式将与 1/0 进行比较,即使它已经是一个隐式布尔表达式,当使用 ColumnElement.self_group() 时。虽然这不影响用户友好的后端(MySQL,SQLite),但 Oracle(可能还包括 SQL Server)没有处理它。现在,任何数据库上的表达式是否隐式布尔都将被提前确定为附加检查,以在语句的编译中不生成整数比较。
    参考:#4320
  • [sql] [bug]
    添加了缺失的窗口函数参数WithinGroup.over.range_WithinGroup.over.rows参数到WithinGroup.over()FunctionFilter.over()方法,以对应于版本 1.1 中作为 SQL 函数“over”方法的一部分添加的 range/rows 功能。
    参考:#4322
  • [sql] [bug]
    修复了  UPDATE 和 DELETE 语句的多表支持未将额外的 FROM 元素视为相关目标的 bug,当相关的 SELECT  也与语句组合时。此更改现在包括了 WHERE 子句中的 SELECT 语句将尝试自动关联回这些额外的表到父 UPDATE/DELETE  中,或者如果使用了Select.correlate(),则无条件关联。请注意,如果 SELECT 语句由于父 UPDATE/DELETE 在其额外的表集中指定相同的表而没有 FROM 子句,则自动关联会引发错误;请显式指定Select.correlate()以解决。
    参考:#4313

oracle

  • [oracle] [bug]
    对于 cx_Oracle,整数数据类型现在将绑定到“int”,根据 cx_Oracle 开发人员的建议。以前,在 cx_Oracle 6.x 系列中使用 cx_Oracle.NUMBER 会导致精度丢失。
    参考:#4309

杂项

  • [bug] [py3k]
    开始在 Python 3.3 及更高版本中从“collections.abc”导入“collections”,以实现 Python 3.8 的兼容性。感谢 Nathaniel Knight 的拉取请求。
  • [no_tags]
    修复了在表反射中用于 SQLite 数据库的“schema”名称不会正确引用模式名称的问题。感谢 Phillip Cloud 的拉取请求。

1.2.10

发布日期:2018 年 7 月 13 日

orm

  • [orm] [bug]
    修复了Bundle构造中的错误,当放置两个同名列时会被去重,当Bundle被用作渲染的 SQL 的一部分,比如在语句的 ORDER BY 或 GROUP BY 中。
    参考:#4295
  • [orm] [bug]
    由于#4287导致 1.2.9 中的回归,使用Load选项与字符串通配符结合使用会导致 TypeError。
    参考:#4298

sql

  • [sql] [bug]
    修复了在任何引用它的Table之前显式删除Sequence的错误,当序列还涉及到该表的服务器端默认值时,当使用MetaData.drop_all()时会中断。现在,在删除表本身之后调用处理要通过非服务器端列默认函数删除的序列的步骤。
    参考:#4300

1.2.9

发布日期:2018 年 6 月 29 日

orm

  • [orm] [bug]
    修复了在Query.join()中链接多个连接元素可能无法正确适应先前的左侧的问题,当链接共享相同基类的连接继承类时。
    参考:#3505
  • [orm] [bug]
    修复了为烘焙查询生成缓存键时的错误,可能导致生成的缓存键过短,对于跨子类的急加载情况。这可能会导致急加载查询被缓存,而不是非急加载查询,或者反之,对于多态的“selectin”加载,或者可能也适用于延迟加载或 selectin 加载。
    参考:#4287
  • [orm] [bug]
    修复了新的多态 selectin 加载中的错误,其中内部使用的 BakedQuery 会被给定的加载器选项改变,这既会不适当地改变子类查询,也会将效果传递给后续查询。
    参考:#4286
  • [orm] [bug]
    修复了由#4256引起的回归(本身是对#4228的回归修复),它破坏了一个未记录的行为,将直接传递给Query构造函数的实体的非序列转换为单个元素序列。虽然这种行为从未得到支持或记录,但已经在使用中,因此已被添加为Query的行为契约。
    参考:#4269
  • [orm] [bug]
    修复了一个性能回归问题,1.2 版本中的一个不正确结果涉及“baked”懒惰加载器,涉及从原始Query对象的加载器选项生成缓存键的问题。如果加载器选项是以“分支”样式构建的,其中使用了多个选项的公共基本元素,那么相同的选项将被重复渲染到缓存键中,这将导致性能问题以及生成错误的缓存键。修复了此问题,同时通过Query.options()应用这种“分支”选项时进行了性能改进,以防止重复应用相同的选项对象。
    参考:#4270

sql

  • [sql] [bug]
    修复了 1.2 版本中的回归问题,该问题是由于#4147导致的,其中一个Table的部分索引列被重新定义为新列,这会在反射期间覆盖列或使用Table.extend_existing时发生,因此当尝试复制这些索引时,Table.tometadata()方法会失败,因为它们仍然指向被替换的列。现在的复制逻辑已经适应了这种情况。
    参考:#4279

mysql

  • [mysql] [bug]
    修复了  mysql-connector-python  方言中的百分号双倍问题,该问题不需要去除百分号的双倍。此外,mysql-connector-python 驱动程序在传递列名到  cursor.description 时是不一致的,因此已添加了一个解码器的解决方法,条件地将这些随机-有时是字节的值解码为  Unicode,仅在需要时解码。还改进了 mysql-connector-python 的测试支持,但应注意,该驱动程序仍然存在与  Unicode 相关的问题,目前尚未解决。
  • [mysql] [bug]
    修复了索引反射中的 bug,在 MySQL 8.0 上,包含 ASC 或 DESC 的索引列规范的索引将不会被正确反映,因为 MySQL 8.0 引入了在表定义字符串中返回此信息的支持。
    参考:#4293
  • [mysql] [bug]
    修复了  MySQLdb 方言和 PyMySQL 等变体中的 bug,其中连接时对“unicode 返回”进行额外检查,明确使用“utf8”字符集,而在  MySQL 8.0 中会发出警告,建议使用 utf8mb4。现在已经用 utf8mb4 替换了这个。MySQL  方言的文档也已更新,以在所有示例中指定 utf8mb4。还对测试套件进行了其他更改,以使用 utf8mb3  字符集和数据库(在某些极端情况下,utf8mb4 存在排序问题),以及支持 MySQL 8.0 中的配置默认更改,例如  explicit_defaults_for_timestamp 以及为无效 MyISAM 索引引发的新错误。
    参考:#4283
  • [mysql] [bug]
    Update 结构现在支持 Join 对象,这是 MySQL 对 UPDATE…FROM 支持的方式。由于该结构已经接受了一个别名对象用于类似的目的,因此已经隐含了对非表进行 UPDATE 的功能,因此现在已经添加了此功能。
    参考:#3645

sqlite

  • [sqlite] [bug]
    修复了测试套件中的问题,在 SQLite 3.24 中添加了一个新的保留字,与 TypeReflectionTest 中的使用冲突。Pull request 由 Nils Philippsen 提供。

mssql

  • [mssql] [bug]
    修复了 MSSQL 反射中的 bug,在不同模式中具有相同名称的两个表具有相同名称的主键约束时,引用其中一个表的外键约束的列将会重复,导致错误。Pull request 由 Sean Dunn 提供。
    参考:#4288
  • [mssql] [bug] [py3k]
    修复了在  Python 3 下运行时针对非标准 SQL Server  数据库的问题,在这种数据库中不包含“sys.dm_exec_sessions”或“sys.dm_pdw_nodes_exec_sessions”视图,导致无法获取隔离级别时,由于  UnboundLocalError 而失败。
    参考:#4273

oracle

  • [oracle] [feature]
    添加了一个新的事件,目前只有 cx_Oracle 方言使用,DialectEvents.setiputsizes()。该事件将 BindParameter 对象的字典传递给特定于 DBAPI 的类型对象,这些对象将被传递到 cx_Oracle cursor.setinputsizes() 方法中。这允许对 setinputsizes 过程进行可见性,并能够修改传递给此方法的数据类型的行为。
    另请参阅
    使用 setinputsizes 对 cx_Oracle 数据绑定性能进行精细控制
    参考:#4290
  • [oracle] [错误] [mysql]
    修复了  Oracle 和 MySQL 方言的 INSERT FROM SELECT 与 CTEs 一起使用时的问题,其中 CTE  被放置在整个语句的上方,这与其他数据库的典型做法相同,但是 Oracle 和 MariaDB 10.2 希望 CTE  位于“INSERT”段的下方。请注意,当将 CTE 应用于 UPDATE 或 DELETE 语句内部的子查询时,Oracle 和 MySQL  方言尚不起作用,因为 CTE 仍然应用于顶部而不是内部子查询。
    参考:#4275

杂项

  • [功能] [扩展]
    添加了新属性Query.lazy_loaded_from,其中填充了一个使用此Query来延迟加载关系的InstanceState。这样做的理由是它作为水平分片功能的提示,使得状态的标识令牌可以作为查询中 id_chooser()的默认标识令牌使用。
    参考:#4243
  • [错误] [py3k]
    用从 Python 标准库复制的一个供应版本替换了 inspect.formatargspec()的使用,因为 inspect.formatargspec()已被弃用,并且从 Python 3.7.0 开始发出警告。
    参考:#4291

1.2.8

发布日期:2018 年 5 月 28 日

orm

  • [orm] [错误]
    由于#4228引起的 1.2.7 中的回归已修复,该回归本身是修复 1.2 级别回归的,其中假定传递给Sessionquery_cls可调用对象是Query的子类,并具有类方法可用性,而不是任意可调用对象。特别是,dogpile 缓存示例说明了query_cls作为函数而不是Query子类。
    参考:#4256
  • [orm] [错误]
    修复了 1.0 版本中长期存在的回归问题,该问题阻止了使用自定义MapperOption来改变Query对象的 _params 以进行延迟加载,因为延迟加载器本身会覆盖这些参数。这适用于维基上的“时间范围”示例。但请注意,现在需要使用Query.populate_existing()方法来重写与已加载到标识映射中的对象相关联的映射器选项。
    作为这一变更的一部分,现在自定义定义的MapperOption将导致与目标对象相关的延迟加载器默认使用非烘焙查询,除非实现了MapperOption._generate_cache_key()方法。特别是,这修复了一个回归,当使用 dogpile.cache 的“高级”示例时发生了问题,该示例由于与烘焙查询加载器不兼容而未返回缓存结果,而是发出 SQL;通过这一变更,dogpile 示例中包含的多个版本的RelationshipCache选项将完全禁用“烘焙”查询。请注意,dogpile 示例也经过现代化处理,以避免这些问题,作为问题#4258的一部分。
    参考:#4128
  • [orm] [bug]
    修复了新的Result.with_post_criteria()方法与子查询急切加载器无法正确交互的错误,即“后置条件”不会应用于嵌入式子查询急切加载器。这与#4128相关,因为现在延迟加载器使用了后置条件功能。
  • [orm] [bug]
    更新了 dogpile.caching 示例,包括适应“烘焙”查询系统的新结构,该系统默认在延迟加载器和一些急切关系加载器中使用。dogpile.caching 的“relationship_caching”和“advanced”示例也由于#4256而中断。这里的问题也通过#4128中的修复来解决。
    参考:#4258

引擎

  • [引擎] [bug]
    修复了连接池问题,即如果在连接池的“返回时重置”序列中引发了断开连接错误,并且针对封闭的Connection对象打开了显式事务(例如从调用Session.close()而没有回滚或提交,或者在没有首先关闭使用Connection.begin()声明的事务的情况下调用Connection.close()),将导致双重签入,这可能会导致对同一连接的并发签出。现在通过断言总体上防止了双重签入条件,同时还修复了特定的双重签入场景。
    参考:#4252
  • [engine] [bug]
    修复了引用泄漏问题,即在语句执行中使用的参数字典的值仍然被“编译缓存”引用,因为存储了 Python 3 字典 keys() 使用的键视图。感谢 Olivier Grisel 提交的拉取请求。

sql

  • [sql] [bug]
    修复了在将文字值解释为 SQL 表达式值时遇到元组值时使用的“模棱两可的文字”错误消息,并且未能正确格式化消息的问题。感谢 Miguel Ventura 提交的拉取请求。

mssql

  • [mssql] [bug]
    修复了由#4061引起的  1.2 版本回归问题,其中 SQL Server 的“BIT”类型被认为是“本地布尔”。这里的目标是避免在列上创建 CHECK  约束,然而更大的问题是 BIT 值不像真/假常量那样行为,并且不能被解释为独立表达式,例如“WHERE ”。SQL Server  方言现在回到非本地布尔,但增加了一个额外的标志,仍然避免创建 CHECK 约束。
    参考:#4250

oracle

  • [oracle] [bug]
    Oracle 的 BINARY_FLOAT 和 BINARY_DOUBLE 数据类型现在在 cx_Oracle.setinputsizes()中参与,传递 NATIVE_FLOAT,以支持 NaN 值。此外,BINARY_FLOATBINARY_DOUBLEDOUBLE_PRECISION现在是Float的子类,因为这些是浮点数据类型,而不是十进制数据类型。这些数据类型已经默认将Float.asdecimal标志设置为 False,以与Float的行为保持一致。
    参考:#4264
  • [oracle] [bug]
    BINARY_FLOATBINARY_DOUBLE数据类型添加了反射功能。
  • [oracle] [bug]
    更改了 Oracle 方言,以便在使用Integer类型时,设置  cx_Oracle.NUMERIC 类型的 setinputsizes()。在 SQLAlchemy 1.1  及更早版本中,cx_Oracle.NUMERIC 无条件地传递给所有数值类型,并且在 1.2  中已删除,以允许更好的数值精度。但是,对于整数,一些数据库/客户端设置将无法将布尔值 True/False 强制转换为整数,这在使用  SQLAlchemy 1.2 时引入了回归行为。总的来说,setinputsizes 逻辑似乎需要更多的灵活性,这是一个开始。
    参考:#4259

测试

  • [tests] [bug]
    修复了测试套件中的一个 bug,如果外部方言返回None作为server_version_info,排除逻辑将引发AttributeError
    参考:#4249

杂项

  • [bug] [ext]
    水平分片扩展现在利用了作为#4137的一部分添加到 ORM 身份密钥中的身份令牌,当对象刷新或基于列的延迟加载或取消过期操作发生时。由于我们知道对象的“分片”来自哪里,所以在刷新时我们利用了这个值,从而避免针对其他不匹配此对象身份的分片的查询。
    参考:#4247
  • [bug] [ext]
    修复了一个竞争条件,可能会在多线程环境中使用 automap AutomapBase.prepare() 与其他可能调用 configure_mappers() 的线程同时进行时发生。 automap 的未完成映射工作特别容易被 configure_mappers() 步骤所引入,导致错误。
    参考:#4266

1.2.7

发布日期:2018 年 4 月 20 日

orm

  • [orm] [bug]
    修复了 1.2  版本中分片查询功能中的回归问题,其中新的“identity_token”元素在搜索相关的多对一元素时,在延迟加载操作的范围内未被正确考虑。新的行为将允许利用“id_chooser”来确定从身份映射中检索的最佳身份键。为了实现这一点,对  1.2 的“identity_token”方法进行了一些重构,对ShardedQuery的实现进行了一些细微更改,其他派生类应该注意这些更改。
    参考:#4228
  • [orm] [bug]
    修复了单继承加载中的问题,其中在使用Query.select_from()方法针对单继承子类使用别名实体时,会导致 SQL 呈现为未别名化的表混入查询,导致笛卡尔积。特别是当针对单继承子类使用新的“selectin”加载器时,会受到影响。
    参考:#4241

sql

  • [sql] [bug]
    修复了使用“literal_binds”选项编译带有显式序列和“inline”生成的 INSERT 语句时,例如在 PostgreSQL 和 Oracle 上,会在序列处理过程中无法容纳额外关键字参数的问题。
    参考:#4231

postgresql

  • [postgresql] [feature]
    添加了新的 PG 类型REGCLASS,有助于将表名转换为 OID 值。感谢 Sebastian Bank 的拉取请求。
    参考:#4160
  • [postgresql] [bug]
    修复了对于 PostgreSQL“range”数据类型(如 DATERANGE)的特殊“不等于”运算符与 Python 的None值进行比较时,无法呈现“IS NOT NULL”的错误。
    参考:#4229

mssql

  • [mssql] [bug]
    修复了由 #4060 引起的 1.2 版本回归,其中用于反映 SQL Server 跨模式外键的查询错误地限制了条件。
    参考:#4234

oracle

  • [oracle] [错误]
    如果精度为 NULL 并且比例为零,则 Oracle NUMBER 数据类型将反映为 INTEGER,因为这是从 Oracle 表中反映 INTEGER 值时的方式。感谢 Kent Bower 的拉取请求。

1.2.6

发布日期:2018 年 3 月 30 日

ORM

  • [ORM] [错误]
    修复了一个 bug,当与具有用不同名称属性设置的非主映射器的类一起使用 Mutable.associate_with()Mutable.as_mutable() 时,会产生属性错误。由于非主映射器不用于持久性,mutable 扩展现在将非主映射器排除在其仪器化步骤之外。
    参考:#4215

引擎

  • [引擎] [错误]
    修复了连接池中的  bug,如果先前的“connect”处理程序抛出异常,则连接可能存在于池中,而没有调用所有“connect”事件处理程序;请注意,方言本身具有发出  SQL 的 connect  处理程序,例如设置事务隔离的处理程序,如果数据库处于不可用状态,则可能失败,但仍允许连接。如果任何连接处理程序失败,首先使连接无效。
    参考:#4225

SQL

  • [SQL] [错误]
    修复了在 1.2.5 版本中从先前对 #4204 的修复中发生的回归,其中在调用 CTE.alias() 方法后引用自身的 CTE 将无法正确引用自身。
    参考:#4204

PostgreSQL

  • [postgresql] [特性]
    添加了对 PostgreSQL 表定义中“PARTITION BY”的支持,使用“postgresql_partition_by”。感谢 Vsevolod Solovyov 的拉取请求。

MSSQL

  • [mssql] [错误]
    调整了对于 pyodbc 的 SQL Server 版本检测,只允许数字标记,过滤掉非整数,因为该方言使用元组-数字比较这个值。这在所有已知的 SQL Server / pyodbc 驱动程序中通常都是正确的。
    参考:#4227

oracle

  • [oracle] [错误]
    支持的最低 cx_Oracle 版本为 5.2(2015 年 6 月)。以前,该方言对版本 5.0 进行了断言,但从 1.2.2 开始,我们使用了一些直到 5.2 才出现的符号。
    参考:#4211

杂项

  • [bug] [declarative]
    移除了在调用__table_args____mapper_args__时会发出警告的问题,这些方法是通过@declared_attr方法命名的,在非映射的声明性混合类中调用时。在映射类上重写这些方法时,直接调用它们是文档中记录的方法。对于常规属性名称,警告仍会发出。
    参考:#4221

1.2.5

发布日期:2018 年 3 月 6 日

orm

  • [orm] [feature]
    添加了新功能Query.only_return_tuples()。导致Query对象无条件地返回键值元组对象,即使查询针对单个实体。感谢 Eric Atkin 的 Pull 请求。
  • [orm] [bug]
    修复了新的“多态 selectin”加载中的错误,当从关系懒加载器部分加载多态对象的选择时,会导致加载中出现“空 IN”条件,在“IN”的“内联”形式中引发错误。
    参考:#4199
  • [orm] [bug]
    修复了 1.2 版本中的一个回归问题,其中包含一个AliasedClass对象的映射选项,在使用QueryableAttribute.of_type()方法时,无法被 pickle 化。1.1 版本的行为是从路径中省略别名类对象,因此恢复了这种行为。
    参考:#4209

sql

  • [sql] [bug]
    修复了:class:.CTE构造中的错误,与#4204中的问题类似,其中一个被别名的CTE在“克隆”操作期间无法正确复制自身,这在 ORM 中经常发生,也在使用ClauseElement.params()方法时发生。
    参考:#4210
  • [sql] [bug]
    修复了 CTE 渲染中的一个错误,当一个CTE也被转换为一个Alias时,如果在 FROM 子句中有多个对 CTE 的引用,则其“ctename AS aliasname”子句不会被适当地渲染。
    参考:#4204
  • [sql] [bug]
    修复了新“扩展 IN 参数”功能中绑定参数处理器的错误,其中值根本无法工作,测试未覆盖这个非常基本的情况,其中包括 ENUM 值无法工作。
    参考:#4198

postgresql

  • [postgresql] [错误] [py3k]
    修复了在 PostgreSQL COLLATE / ARRAY 调整中首次引入的错误,最初在#4006中,Python 3.7 正则表达式的新行为导致修复失败。
    此更改也回溯到:1.1.18
    参考:#4208

mysql

  • [mysql] [错误]
    MySQL 方言现在明确使用SELECT @@version查询服务器版本,以确保我们获得正确的版本信息。代理服务器如 MaxScale 会干扰传递给 DBAPI 的 connection.server_version 值,因此这不再可靠。
    此更改也回溯到:1.1.18
    参考:#4205

1.2.4

发布日期:2018 年 2 月 22 日

orm

  • [orm] [错误]
    修复了 ORM 版本控制功能中的 1.2 回归错误,其中针对select()alias()的映射,还使用了对基础表的版本控制列,由于添加的检查部分#3673而失败。
    参考:#4193

引擎

  • [引擎] [错误]
    由于从#4181修复引起的 1.2.3 版本的回归错误,事件系统中涉及EngineOptionEngine的更改未考虑到事件的移除,当在类级别调用时会引发AttributeError
    参考:#4190

sql

  • [sql] [错误]
    修复了 CTE 表达式在给定名称区分大小写或以其他方式需要引号时,其名称或别名未被引用的错误。感谢 Eric Atkin 提供的拉取请求。
    参考:#4197

1.2.3

发布日期:2018 年 2 月 16 日

orm

  • [orm] [功能]
    set_attribute()函数添加了新参数set_attribute.inititator,允许从监听器函数接收的事件令牌传播到后续设置事件。
  • [orm] [错误]
    修复了 post_update 功能中的问题,在父对象已删除但相关对象尚未删除时,会发出 UPDATE。这个问题已经存在很长时间,然而自从 1.2 版本现在为 post_update 断言匹配的行,这会引发错误。
    这个改变也 回溯 到:1.1.16
    参考:#4187
  • [orm] [bug]
    由于针对版本 1.2.2 以及 1.1.15 的问题 #4116 的修复导致的回归已经修复,该问题导致在一些声明混合/继承情况下以及如果访问未映射类的关联代理时,误计算 AssociationProxy 的 “拥有类” 为 NoneType 类。现在,“找出所有者”的逻辑已被一个深度程序替换,该程序搜索分配给类或子类的完整映射器层次结构,以确定正确(我们希望)的匹配;如果找不到匹配项,则不会分配所有者。如果代理针对未映射实例使用,现在会引发异常。
    这个改变也 回溯 到:1.1.16
    参考:#4185
  • [orm] [bug]
    修复了一个 bug,即 Bundle 对象没有正确报告由 bundle 表示的主 Mapper 对象,如果有的话。这个问题的直接副作用是新的 selectinload 加载策略无法与水平分片扩展一起工作。
    参考:#4175
  • [orm] [bug]
    修复了具体继承映射中的 bug,即用户定义的属性(例如与兄弟类的映射属性同名的混合属性)将被映射器覆盖为在实例级别不可访问。此外,确保在映射器配置阶段不会隐式调用用户绑定的描述符。
    参考:#4188
  • [orm] [bug]
    修复了一个 bug,即 reconstructor() 事件助手如果应用于映射类的 __init__() 方法,则不会被识别。
    参考:#4178

engine

  • [engine] [bug]
    修复了与类级别的 Engine 关联的事件在使用 Engine.execution_options() 方法时会重复的 bug。为了实现这一点,半私有类 OptionEngine 不再直接在类级别接受事件,并将引发错误;该类仅从其父 Engine 传播类级别事件。实例级别事件继续像以前一样工作。
    参考:#4181
  • [engine] [bug]
    URL 对象现在允许多次指定查询键,其值将被连接成列表。这是为了支持插件功能,文档记录在 CreateEnginePlugin 中,文档指出“plugin”可以多次传递。此外,插件名称可以通过新的 create_engine.plugins 参数在 URL 之外传递给 create_engine()
    参考:#4170

sql

  • [sql] [feature]
    添加了对 Enum 的支持,以持久化枚举的值,而不是键,当使用 Python pep-435 风格的枚举对象时。用户提供一个可调用函数,该函数将返回要持久化的字符串值。这允许对非字符串值的枚举也可以进行值持久化。感谢 Jon Snyder 提交的拉取请求。
    参考:#3906
  • [sql] [bug]
    修复了Enum类型无法正确处理枚举“别名”的 bug,当多个键引用相同值时。感谢 Daniel Knell 提交的拉取请求。
    参考:#4180

postgresql

  • [postgresql] [bug]
    将“SSL SYSCALL error: Operation timed out”添加到触发 psycopg2 驱动程序“断开连接”场景的消息列表中。感谢 André Cruz 提交的���取请求。
    此更改也回溯至:1.1.16
  • [postgresql] [bug]
    将“TRUNCATE”添加到 PostgreSQL 方言接受的关键字列表中,作为“autocommit”触发关键字。感谢 Jacob Hayes 提交的拉取请求。
    此更改也回溯至:1.1.16

sqlite

  • [sqlite] [bug]
    修复了当平台既没有安装 pysqlite2 也没有安装 sqlite3 时引发的导入错误,使得引发与 sqlite3 相关的导入错误,而不是实际的失败模式 pysqlite2。感谢 Robin 的拉取请求。

oracle

  • [oracle] [feature]
    外键的 ON DELETE 选项现在是 Oracle 反射的一部分。Oracle 不支持 ON UPDATE 级联。感谢 Miroslav Shubernetskiy 的拉取请求。
  • [oracle] [bug]
    修复了 cx_Oracle 断开连接检测中的 bug,该 bug 用于 pre_ping 和其他功能,之前可能会引发一个包含数字错误代码的 DatabaseError;之前我们没有在这种情况下检查断开连接代码。
    参考:#4182

tests

  • [tests] [bug]
    在 1.2 版本中添加的一个测试,旨在确认  Python 2.7 行为,结果只确认了 Python 2.7.8 的行为。Python bug #8743 仍然影响 Python 2.7.7  及更早版本中的集合比较,因此涉及 AssociationSet 的测试不再适用于这些较旧的 Python 2.7 版本。
    参考:#3265

misc

  • [bug] [pool]
    修复了一个相当严重的连接池 bug,当一个连接在由用户定义的 DisconnectionError 或由 1.2 版本发布的“pre_ping”功能刷新后被获取时,如果连接由 weakref 清理返回到池中(例如前端对象被垃圾回收),则如果  weakref 仍然指向先前失效的 DBAPI  连接,那么将不会正确重置连接;这将导致日志中的堆栈跟踪和一个连接被检入池中而未被重置,这可能导致锁定问题。
    此更改也被回溯到:1.1.16
    参考:#4184

1.2.2

发布日期:2018 年 1 月 24 日

orm

  • [orm] [bug]
    修复了 1.2 版本中关于新 bulk_replace 事件的回归,其中一个反向引用在批量赋值将对象分配给新所有者时,未能从先前所有者中删除对象。
    参考:#4171

mysql

  • [mysql] [bug]
    为了引用目的,向 MySQL 方言添加了更多 MySQL 8.0 保留字。感谢 Riccardo Magliocchetti 的拉取请求。

mssql

  • [mssql] [bug]
    将 ODBC 错误代码 10054 添加到作为 ODBC / MSSQL 服务器断开连接的错误代码列表中。
    参考:#4164

oracle

  • [oracle] [bug]
    cx_Oracle 方言现在在使用  NVARCHAR2 数据类型时,无条件地调用 setinputsizes(),其中 SQLAlchemy 中对应的是  sqltypes.Unicode()。根据 cx_Oracle 的作者,这样可以在 Oracle 客户端内正确进行转换,而不受  NLS_NCHAR_CHARACTERSET 设置的影响。
    参考:#4163

1.2.1

发布日期:2018 年 1 月 15 日

orm

  • [orm] [bug]
    修复了在嵌套或子事务回滚期间从会话中正确移除的对象的回归,该对象的主键也已发生突变,从而导致使用会话时出现后续问题的错误。
    此更改也被回溯到:1.1.16
    参考:#4151
  • [orm] [bug]
    修复了 pickle 格式的 Load / _UnboundLoad 对象(例如加载器选项)的回归,即使尝试这样做,从旧格式接收到的对象__setstate__()也会因为 UnboundLocalError 而引发异常。现在添加了测试以确保此功能正常工作。
    参考:#4159
  • [orm] [bug]
    修复了#3954中引入的回归,新的 lazyload 缓存方案导致具有 of_type 的加载器选项的查询会导致无关路径的惰性加载失败,从而导致 TypeError。
    参考:#4153
  • [orm] [bug]
    修复了新的“selectin”关系加载器中的错误,当加载多态对象的集合时,加载器可能会尝试加载不存在的关系,其中只有一些映射器包括该关系,通常在使用PropComparator.of_type()时。
    参考:#4156

sql

  • [sql] [bug]
    修复了Insert.values()中的错误,其中使用“多值”格式与Column对象作为键而不是字符串会失败。拉请求由 Aubrey Stark-Toller 提供。
    此更改也被回溯到:1.1.16
    参考:#4162

mssql

  • [mssql] [bug]
    修复了 1.2 中新修复的引用中对排序名称的引用在#3785中破坏了 SQL Server 的问题,SQL Server 明确不理解排序名称的引用。现在,是否引用混合大小写排序名称已延迟到方言级别的决定,以便每个方言可以直接准备这些标识符。
    参考:#4154

oracle

  • [oracle] [bug]
    修复了从 cx_Oracle 方言中删除大多数 setinputsizes 规则导致 TIMESTAMP 数据类型无法检索小数秒的问题。
    参考:#4157
  • [oracle] [bug]
    修复了 Oracle 导入中的回归,其中缺少逗号导致出现未定义的符号。拉请求由 Miroslav Shubernetskiy 提供。

测试

  • [测试] [bug]
    从公共测试套件中删除了一个特定于 Oracle 的要求规则,该规则干扰了第三方方言套件。
  • [测试] [bug]
    添加了一个新的排除规则组 group_by_complex_expression,禁用了使用“GROUP BY ”的测试,这似乎对至少两个第三方方言不可行。

杂项

  • [bug] [扩展]
    修复了联合代理中的回归问题,原因是 #3769(允许链式的 any() / has())其中一个调用了一个针对联合代理的 contains() 错误链接形式(o2m 关系,联合代理(m2o 关系,m2o 关系)),将在链的最终链接上重新应用 contains() 时会引发错误。
    参考:#4150

1.2.0

发布日期:2017 年 12 月 27 日

orm

  • [orm] [功能]
    在 ORM  的标识映射中添加了一个新的数据成员,称为“identity_token”。此标记默认为  None,但可以被数据库分片方案用来区分来自不同数据库的具有相同主键的内存对象。水平分片扩展将此标记应用到 shard  标识符上,从而允许主键在水平分片后端之间重复。
    另见
    标识键增强以支持分片
    参考:#4137
  • [orm] [bug] [扩展]
    修复了联合代理中的错误,如果先使用 AliasedClass 作为父类调用联合代理,那么联合代理会意外地将自身链接到 AliasedClass 对象上,在后续使用时会引发错误。
    此更改也被 回溯 至:1.1.15
    参考:#4116
  • [orm] [bug]
    修复了 contains_eager() 查询选项中的错误,使用跨越多个连接级别引用子类的路径会要求“别名”参数也提供相同的子类型,以避免向查询添加不必要的 FROM 子句;另外,使用 contains_eager() 跨越使用子类的 aliased() 对象作为 PropComparator.of_type() 参数的子类也会正确渲染。
    参考:#4130
  • [orm] [bug]
    Query.exists()方法现在将在查询呈现时禁用急加载器。以前,连接急加载连接将被不必要地呈现,以及子查询急加载查询将被不必要地生成。新行为与Query.subquery()方法相匹配。
    参考:#4032

orm 声明

  • [orm] [declarative] [bug]
    修复了一个错误,其中描述符(即基于AbstractConcreteBase的层次结构中的映射列或关系)在刷新操作期间被引用,导致错误,因为该属性未映射为映射器属性。如果类未在其映射器中包含“concrete=True”,则其他属性(如AbstractConcreteBase添加的“type”列)可能出现类似问题,但此处的检查也应防止该情况引起问题。
    此更改也回溯到:1.1.15
    参考:#4124

engine

  • [engine] [feature]
    URL对象的“password”属性现在可以是任何用户定义或用户子类化的字符串对象,该对象响应 Python 的str()内置函数。传递的对象将保持为数据成员URL.password_original,并且在读取URL.password属性以生成字符串值时将进行查询。
    参考:#4089

sql

  • [sql] [bug]
    修复了一个错误,其中ColumnDefault__repr__如果参数是元组,则会失败。感谢 Nicolas Caniart 的拉取请求。
    此更改也回溯到:1.1.15
    参考:#4126
  • [sql] [bug]
    重新设计了在 1.2.0b2 中引入的新的“autoescape”选项用于 startswith(),endswith()的“autoescape”功能,使其完全自动化;转义字符现在默认为斜杠"/",并应用于百分号、下划线以及转义字符本身,以实现完全自动转义。也可以使用“escape”参数更改字符。
    请参阅
    新的“autoescape”选项用于 startswith(),endswith()
    参考:#2694
  • [sql] [bug]
    修复了Table.tometadata()方法无法正确适应不仅由简单列表达式组成的Index对象的问题,例如针对text()构造的索引,使用 SQL 表达式或func的索引等。现在该例程会完全复制表达式到一个新的Index对象,同时将所有与目标表的列绑定的Column对象替换为目标表的列。
    参考:#4147
  • [sql] [错误]
    ColumnElement的“访问名称”从“column”更改为“column_element”,这样当此元素被用作用户定义的 SQL 元素的基础时,它不会被假定为在被 ORM 常用的各种 SQL 遍历工具处理时表现得像一个绑定到表的ColumnClause
    参考:#4142
  • [sql] [错误] [扩展]
    修复了ARRAY数据类型中的问题,本质上与#3832的问题相同,只是不是一个回归问题,ARRAY上的列附加事件不会正确触发,从而干扰依赖于此的系统。这个问题破坏的一个关键用例是使用混入来声明使用MutableList.as_mutable()的列。
    参考:#4141
  • [sql] [错误]
    修复了新的“扩展绑定参数”功能中的错误,即如果一个语句中使用了多个参数,则正则表达式将无法正确匹配参数名。
    参考:#4140
  • [sql] [增强]
    为 PostgreSQL、MySQL、MS SQL Server(以及不支持的 Sybase 方言)实现了“DELETE…FROM”语法,类似于“UPDATE…FROM”的工作方式。引用了 Pieter Mulder 的拉取请求。
    另请参阅
    支持多表条件的 DELETE
    参考:#959

postgresql

  • [postgresql] [特性]
    添加了新的MONEY数据类型。感谢 Cleber J Santos 的拉取请求。

mysql

  • [mysql] [bug]
    MySQL 5.7.20 现在警告使用@tx_isolation 变量;现在执行版本检查并使用@transaction_isolation 来代替以防止此警告。
    此更改也回溯到:1.1.15
    参考:#4120
  • [mysql] [bug]
    修复了从问题 1.2.0b3 中的回归,其中“MariaDB”版本比较在 Python 3 下可能会失败,对于某些特定的 MariaDB 版本字符串。
    参考:#4115

mssql

  • [mssql] [bug]
    修复了 sqltypes.BINARY 和 sqltypes.VARBINARY 数据类型不包含正确的绑定值处理程序以用于 pyodbc 的错误,这允许传递帮助 FreeTDS 的 pyodbc.NullParam 值。
    参考:#4121

oracle

  • [oracle] [bug]
    添加了一些额外规则,以完全处理Decimal('Infinity')Decimal('-Infinity')值与 cx_Oracle 数字时使用asdecimal=True
    参考:#4064

misc

  • [misc] [feature]
    在文档中添加了一个新的错误部分,介绍常见错误消息的背景。SQLAlchemy 中的选定异常将在其字符串输出中包含指向此页面相关部分的链接。
  • [enhancement] [ext]
    在烘焙查询系统中添加了新方法Result.with_post_criteria(),允许在查询从缓存中拉取后进行非 SQL 修改转换。此方法可以与ShardedQuery一起使用,以设置分片标识符。ShardedQuery也已经修改,使其ShardedQuery.get()方法与Result的方法正确交互。
    参考:#4135

1.2.0b3

发布日期:2017 年 10 月 13 日

orm

  • [orm] [bug]
    修复了 ORM 关系会警告针对在继承层次结构中的兄弟类中的冲突同步目标(例如,两个关系都将写入同一列)的错误,其中两个关系实际上永远不会在写入时发生冲突。
    此更改也回溯到:1.1.15
    参考:#4078
  • [orm] [bug]
    修复了针对单表继承实体使用相关选择时,在外部查询中无法正确呈现的错误,因为单一继承鉴别器标准的调整不当地重新应用于外部查询。
    此更改也回溯到:1.1.15
    参考:#4103
  • [orm] [bug]
    修复了Session.merge()中的错误,遵循与#4030类似的线路,其中对于标识映射中的目标对象的内部检查可能会导致错误,如果在合并程序实际检索对象之前立即对其进行垃圾回收。
    此更改也回溯到:1.1.14
    参考:#4069
  • [orm] [bug]
    修复了一个错误,即如果从使用连接式急加载加载的关系扩展,则不会识别undefer_group()选项。此外,由于该错误导致执行过多的工作,因此在结果集列的初始计算中,Python 函数调用次数也提高了 20%,这与#3915的连接急加载改进相辅相成。
    此更改也回溯到:1.1.14
    参考:#4048
  • [orm] [bug]
    修复了Session.merge()中的错误,其中集合中的对象的主键属性设置为None,对于通常是自动递增的键,将被视为数据库持久化键的一部分,导致在内部去重过程中实际上只插入一个对象到数据库中。
    此更改也回溯到:1.1.14
    参考:#4056
  • [orm] [bug]
    当针对不是针对MapperProperty的属性(例如关联代理)使用synonym()时,会引发InvalidRequestError。以前,尝试定位不存在的属性会导致递归溢出。
    此更改也回溯到:1.1.14
    参考:#4067
  • [orm] [bug]
    由于#3934引入的 1.2.0b1 版本中的回归问题已修复,Session在回滚失败时未能“停用”事务(目标问题是当 MySQL 丢失 SAVEPOINT 时)。 这将导致随后调用Session.rollback()再次引发错误,而不是完成并将Session恢复为活动状态。
    参考:#4050
  • [orm] [bug]
    修复了make_transient_to_detached()函数会使目标对象上的所有属性过期的问题,包括“延迟加载”属性,这会导致属性在下一次刷新时被取消延迟加载,从而导致属性意外加载。
    参考:#4084
  • [orm] [bug]
    修复了涉及删除孤立级联的错误,其中在父对象成为会话的一部分之前成为孤立项的相关项仍被跟踪为移动到孤立状态,这导致它被从会话中删除而不是被刷新。
    注意
    这个修复在 1.2.0b3 版本发布期间被错误地合并,并且未被添加到更改日志中。此更改日志注释已作为 1.2.13 版本的一部分追加到发布中。
    参考:#4040
  • [orm] [bug]
    修复了“selectin”多态加载,使用单独的 IN 查询加载子类中的错误,该错误阻止了多级类层次结构中“selectin”和“inline”设置按预期交互。
    参考:#4026
  • [orm] [bug]
    移除了当映射器和加载策略使用的  LRU  缓存达到阈值时发出的警告;最初这个警告的目的是防止生成过多的缓存键,但后来基本上成为“创建许多引擎”反模式的检查。虽然这仍然是一个反模式,但测试套件既为每个测试创建一个引擎又在所有警告上引发的存在将是一个不便;对于这个警告,这样的测试套件改变其架构并不是必要的(尽管每个测试一个引擎的套件总是更好)。
    参考:#4071
  • [orm] [bug]
    修复了在 1.2 版本中作为#3954的一部分添加的 SQL 缓存键生成中的错误,导致在与延迟加载关系选项一起使用undefer_group()选项���会导致属性错误。
    参考:#4049
  • [orm] [bug]
    修改了在#3366中对  ORM 更新/删除评估器所做的更改,如果更新或删除中存在未映射的列表达式,并且评估器可以将其名称与目标类的映射列匹配,将发出警告,而不是引发  UnevaluatableError。这本质上是 1.2  版本之前的行为,目的是允许依赖于此模式的应用程序进行迁移。但是,如果给定的属性名称无法与映射器的列匹配,仍会引发  UnevaluatableError,这是在#3366中修复的问题。
    参考:#4073

orm declarative

  • [orm] [declarative] [bug]
    如果子类尝试覆盖在父类上使用@declared_attr.cascading声明的属性,则会发出警告,覆盖的属性将被忽略。这种用例无法在更复杂的开发工作下完全支持到更进一步的子类,因此为了一致性,“级联”将一直被遵守,无论覆盖属性如何。
    参考:#4091
  • [orm] [declarative] [bug]
    如果使用@declared_attr.cascading属性与特殊的声明名称(如__tablename__)一起使用,将发出警告,因为这没有任何效果。
    参考:#4092

engine

  • [engine] [feature]
    ResultProxy添加了__next__()next()方法,以便next()内置函数直接在对象上起作用。ResultProxy长期以来已经有一个__iter__()方法,允许它响应iter()内置函数。__iter__()的实现保持不变,因为性能测试表明,使用带有StopIteration__next__()方法进行迭代在 Python 2.7 和 3.6 中都要慢大约 20%。
    参考:#4077
  • [engine] [bug]
    PoolConnection进行了一些调整,使得在pool.EmptyAttributeError异常捕获中不再运行恢复逻辑,因为当恢复操作本身失败时,Python 3 会创建一个误导性的堆栈跟踪,将Empty / AttributeError误认为是原因,而实际上这些异常捕获是控制流的一部分。
    参考:#4028

sql

  • [sql] [bug]
    修复了最近添加的 ColumnOperators.any_()ColumnOperators.all_() 方法在作为方法调用时无法正常工作的 bug,而不是使用独立函数 any_()all_()。还为这些相对晦涩的 SQL 操作符添加了文档示例。
    此更改也已回溯至:1.1.15
    参考:#4093
  • [sql] [bug]
    添加了一个新方法 DefaultExecutionContext.get_current_parameters(),该方法在基于函数的默认值生成器中使用,以检索传递给语句的当前参数。这个新函数与 DefaultExecutionContext.current_parameters 属性不同,它还提供了对应于多值“插入”结构的参数的可选分组。以前无法识别与函数调用相关的参数子集。
    另请参阅
    用于具有上下文默认生成器的多值插入的参数助手
    上下文敏感的默认函数
    参考:#4075
  • [sql] [bug]
    修复了新的 SQL 注释功能中的 bug,使用 Table.tometadata() 时,表和列的注释不会被复制。
    参考:#4087
  • [sql] [bug]
    在版本 1.1 中,Boolean 类型存在问题,即通过 bool() 进行布尔强制转换会发生在不支持“本地布尔”功能的后端,但不会发生在本地布尔后端,这意味着字符串 "0" 现在表现不一致。经过一次投票,达成共识,即非布尔值应该引发错误,特别是���字符串 "0" 的模棱两可情况下;因此,如果传入值不在范围 None, True, False, 1, 0 内,Boolean 数据类型现在将引发 ValueError
    另请参阅
    布尔数据类型现在强制 True/False/None 值
    参考:#4102
  • [sql] [bug]
    优化了Operators.op()的行为,使得在所有情况下,如果Operators.op.is_comparison标志设置为 True,则结果表达式的返回类型将是Boolean,如果标志为 False,则结果表达式的返回类型将与左侧表达式的类型相同,这是其他运算符的典型默认行为。还添加了一个新参数Operators.op.return_type以及一个辅助方法Operators.bool_op()
    另请参阅
    自定义运算符的类型行为已经保持一致
    参考:#4063
  • [sql] [bug]
    EnumIntervalBoolean类型进行了内部优化,现在这些类型都扩展了一个通用的 mixin Emulated,表示提供了对数据库本地类型的 Python 端模拟,在使用支持的后端时切换到数据库本地类型。直接使用 PostgreSQL INTERVAL 类型现在将包括正确的类型强制转换规则,这些规则也适用于 Interval 的 SQL 表达式(例如,将日期添加到间隔会产生日期时间)。
    引用:#4088

postgresql

  • [postgresql] [feature]
    向 psycopg2 方言添加了一个新的标志 use_batch_mode。当 Engine 调用 cursor.executemany() 时,此标志允许使用 psycopg2 的 psycopg2.extras.execute_batch 扩展。这个扩展在批量运行 INSERT 语句时提供了至关重要的性能提升,增加了一个数量级。该标志默认为 False,因为目前被认为是实验性的。
    请参见
    支持批处理模式 / 快速执行助手
    引用:#4109
  • [postgresql] [bug]
    与 COLLATE 结合使用进一步修复了 ARRAY 类,因为在 #4006 中进行的修复未能适应多维数组。
    这个变更也被回溯到:1.1.15
    引用:#4006
  • [postgresql] [bug]
    修复了 array_agg 函数中的错误,当传递一个已经是 ARRAY 类型的参数时,比如 PostgreSQL 的 array 结构,会产生一个 ValueError,因为该函数试图嵌套数组。
    这个变更也被回溯到:1.1.15
    引用:#4107
  • [postgresql] [bug]
    修复了 PostgreSQL 中 Insert.on_conflict_do_update() 的错误,该错误将阻止将插入语句用作 CTE,例如通过 Insert.cte() 在另一个语句中。
    这个变更也被回溯到:1.1.15
    引用:#4074
  • [postgresql] [bug]
    修复了 pg8000 驱动器的错误,如果使用带有模式名称的 MetaData.reflect(),则会失败,因为模式名称将作为一个“quoted_name”对象发送,这是一个字符串子类,pg8000 不认识。连接时将 quoted_name 类型添加到 pg8000 的 py_types 集合中。
    引用:#4041
  • [postgresql] [bug]
    为 pg8000 驱动器启用了 UUID 支持,这支持本机 Python uuid 往返于此数据类型。然而,仍然不支持 UUID 数组。
    引用:#4016

mysql

  • [mysql] [bug]
    当检测到 MariaDB 10.2.8 或更早版本的 10.2 系列时,会发出警告,因为这些版本中的 CHECK 约束存在重大问题,这些问题已在 10.2.9 解决。
    请注意,此更改日志消息未随 SQLAlchemy 1.2.0b3 一起发布,而是事后添加的。
    此更改也回溯到:1.1.15
    参考:#4097
  • [mysql] [bug]
    修复了在 MariaDB 10.2 系列中CURRENT_TIMESTAMP由于语法更改而无法正确反映的问题,现在该函数表示为current_timestamp()
    此更改也回溯到:1.1.15
    参考:#4096
  • [mysql] [bug]
    MariaDB 10.2 现在支持 CHECK 约束(警告:由于#4097中指出的上游问题,请��用 10.2.9 或更高版本)。反射现在在SHOW CREATE TABLE输出中考虑这些 CHECK 约束。
    此更改也回溯到:1.1.15
    参考:#4098
  • [mysql] [bug]
    将新的 MySQL INSERT…ON DUPLICATE KEY UPDATE 结构的.values属性更名为.inserted,因为Insert已经有一个名为Insert.values()的方法。.inserted属性最终呈现了 MySQL 的VALUES()函数。
    参考:#4072

sqlite

  • [sqlite] [bug]
    修复了 SQLite CHECK 约束反射失败的 bug,如果引用的表在远程模式下,例如在 SQLite 中由 ATTACH 引用的远程数据库。
    此更改也回溯到:1.1.15
    参考:#4099

mssql

  • [mssql] [feature]
    添加了一个新的TIMESTAMP数据类型,它在 SQL Server 中正确地像二进制数据类型一样工作,而不是 datetime 类型,因为 SQL Server 在这里违反了 SQL 标准。还添加了ROWVERSION,因为 SQL Server 中的TIMESTAMP类型已被弃用,改用 ROWVERSION。
    参考:#4086
  • [mssql] [feature]
    为 PyODBC 和 pymssql 方言添加了对“AUTOCOMMIT”隔离级别的支持,通过Connection.execution_options()来建立,这个隔离级别在底层连接对象上设置了适当的 DBAPI 特定标志。
    参考:#4058
  • [mssql] [bug]
    在 PyODBC 方言中为 SQL Server 添加了一整套“连接关闭”异常代码,包括‘08S01’、‘01002’、‘08003’、‘08007’、‘08S02’、‘08001’、‘HYT00’、‘HY010’。之前只覆盖了‘08S01’。
    此更改也已回溯至:1.1.15
    参考:#4095
  • [mssql] [bug]
    SQL Server 支持 SQLAlchemy 所称的“本地布尔”与其 BIT 类型,因为该类型只接受 0 或 1,而 DBAPI 返回其值为 True/False。因此,SQL Server 方言现在启用了“本地布尔”支持,即 Boolean 数据类型不会生成 CHECK 约束。与其他本地布尔的唯一区别在于这里仍然不生成“true” / “false”常量,因此“1”和“0”仍然在这里呈现。
    参考:#4061
  • [mssql] [bug]
    修复了 pymssql 方言中 SQL 文本中的百分号,例如在模数表达式或文字值中使用的百分号,不会被加倍,这似乎是 pymssql 期望的。尽管 pymssql DBAPI 使用“pyformat”参数样式,它认为百分号本身是重要的。
    参考:#4057
  • [mssql] [bug]
    修复了 SQL Server 方言在反射自引用外键约束时可能从多个模式中提取列的错误,如果多个模式包含相同名称的约束针对相同名称的表。
    参考:#4060
  • [mssql] [bug] [orm]
    为方言添加了一个新的“行计数支持”类,用于在“RETURNING”时特定于方言的情况下,对于  SQL Server 看起来像“OUTPUT inserted”的情况,因为 PyODBC 后端在 OUTPUT 生效时无法给我们  UPDATE 或 DELETE 语句的行计数。这主要影响  ORM,当刷新正在更新包含服务器计算值的行时,如果后端没有返回预期的行数,将会引发错误。PyODBC 现在声明它支持行数计数,除非存在  OUTPUT.inserted,ORM 在刷新时会考虑到这一点,以确定是否查找行数计数。
    参考:#4062
  • [mssql] [bug] [orm]
    启用了 pymssql 方言的“sane_rowcount”标志,指示 DBAPI 现在报告了 UPDATE 或 DELETE 语句受影响的正确行数。这主要影响 ORM 版本功能,因为现在它可以验证目标版本上受影响的行数。
  • [mssql] [bug]
    添加了一个规则到 SQL Server 索引反射中,忽略所谓的隐式存在于未指定聚集索引的表上的“堆”索引。
    参考:#4059

oracle

  • [oracle] [performance] [bug] [py2k]
    修复了由于对 #3937 的修复引起的性能回退,其中 cx_Oracle 版本 5.3 删除了其命名空间中的 .UNICODE 符号,这被解释为 cx_Oracle 的“WITH_UNICODE”模式被无条件地打开,从而在 SQLAlchemy  侧调用函数时无条件地将所有字符串转换为 unicode 并引起性能影响。实际上,根据 cx_Oracle 的作者,自 5.1  版本以来,“WITH_UNICODE”模式已经完全删除,因此不再需要昂贵的 unicode 转换函数,并且如果在 Python 2 下检测到  cx_Oracle 5.1 或更高版本,则会被禁用。还恢复了在 #3937 中删除的针对“WITH_UNICODE”模式的警告。
    此更改也已回溯至:1.1.13、1.0.19
    参考:#4035
  • [oracle] [bug]
    使用 cx_Oracle 部分支持持久化和检索 Oracle 值“infinity”,只使用 Python 浮点值,例如 float("inf")。目前 cx_Oracle DBAPI 驱动程序尚未实现对十进制的支持。
    参考:#4064
  • [oracle] [bug]
    cx_Oracle  方言已经进行了重组和现代化,以利用在旧的 4.x 系列 cx_Oracle 中不存在的新模式。这包括 cx_Oracle 的最低版本是 5.x  系列,而且 cx_Oracle 6.x 现在已经完全测试过了。最重要的变化涉及类型转换,主要是关于数值 / 浮点和 LOB  数据类型,更有效地利用了 cx_Oracle 类型处理钩子,简化了绑定参数和结果数据的处理方式。
    另请参阅
    cx_Oracle 方言,类型系统主要重构
  • [oracle] [bug]
    对于所有版本的  cx_Oracle,两阶段支持已完全移除,而在 1.2.0b1 中,这个变化仅对 cx_Oracle 6.x 系列生效。这个特性在任何版本的  cx_Oracle 中从未正常工作过,并且在 cx_Oracle 6.x 中,SQLAlchemy 依赖的 API 已被移除。
    另请参阅
    cx_Oracle 方言,类型系统主要重构
    参考:#3997
  • [oracle] [bug]
    在使用 cx_Oracle 后端的 Insert.returning() 返回结果集时,现在使用正确的列 / 标签名称,就像其他所有方言一样。以前,这些结果会出现为 ret_nnn
    另请参阅
    cx_Oracle 方言,类型系统主要重构
  • [oracle] [bug]
    对 cx_Oracle 方言的几个参数现在已经不推荐使用,并且不会产生任何效果:auto_setinputsizesexclude_setinputsizesallow_twophase
    另请参阅
    cx_Oracle 方言、类型系统的重大重构
  • [oracle] [bug]
    修复了一个错误,其中在 Oracle 下反映出的索引,例如“column DESC”,如果表也没有主键,则不会返回,这是由于尝试将 Oracle 隐式添加到主键列上的索引的逻辑导致的。
    参考:#4042
  • [oracle] [bug]
    由于  cx_Oracle 6.0 引起的更多回归已修复;目前,用户的唯一行为变化是断开检测现在除了 cx_Oracle.InterfaceError  外还检测 cx_Oracle.DatabaseError,因为这种行为似乎已经改变。 关于数字精度和无法关闭连接的其他问题仍在上游  cx_Oracle 问题跟踪器中挂起。
    参考:#4045
  • [oracle] [bug]
    修复了 Oracle 8 的“非 ansi”连接模式不会向使用其他运算符而不是=运算符的表达式添加(+)运算符的错误。 (+)需要出现在右侧的所有列上。
    参考:#4076

1.2.0b2

发布日期:2017 年 7 月 24 日

orm

  • [orm] [bug]
    修复了从 1.1.11 中添加附加非实体列到包含子查询加载关系的实体的查询失败的回归,由于在 1.1.11 中添加了的检查作为#4011的结果。
    此更改也回溯到:1.1.12
    参考:#4033
  • [orm] [bug]
    修复了 1.1 中作为 #3514 的一部分添加的 JSON NULL 评估逻辑中的错误,其中逻辑不会适应 ORM 映射的属性与Column不同的名称。
    此更改也回溯到:1.1.12
    参考:#4031
  • [orm] [bug]
    WeakInstanceDict 内的所有方法中添加了 KeyError 检查,其中 key in dict 的检查后跟着对该键的索引访问,以防止在负载下垃圾收集可能会将该键从字典中移除的情况下,代码假设其存在,导致非常不频繁的 KeyError 引发。
    此更改也回溯到:1.1.12
    参考:#4030

测试

  • [tests] [bug] [py3k]
    修复了与 Python 3.6.2 作为不兼容的更改的测试夹具中的问题,涉及上下文管理器。
    此更改也回溯到:1.1.12, 1.0.18
    参考:#4034


SqlAlchemy 2.0 中文文档(六十一)(2)https://developer.aliyun.com/article/1560910

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
算法 安全 数据安全/隐私保护
介绍一下移动应用中的数据加密技术。
移动应用数据加密保护隐私,包括对称加密(速度快但密钥管理难)、非对称加密(公钥私钥确保安全如RSA、ECC)、哈希函数(固定长度输出验证信息)和数字签名(公钥验证来源与完整性)。选择合适的加密算法对安全性至关重要,兼顾性能以不影响用户体验。加密技术确保信息的机密性、真实性和完整性,增强用户信任。开发者应熟练掌握这些工具。
459 0
|
存储 JSON JavaScript
Python字典和JSON字符串相互转化方法
【2月更文挑战第18天】
521 3
|
JavaScript 前端开发
JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
JS 下载 URL 链接文件(点击按钮、点击a标签、支持代理与非代理下载)
1272 0
|
11月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
634 7
Spring Boot 入门:简化 Java Web 开发的强大工具
|
6月前
|
网络协议 安全 网络安全
NAT网络地址转换
NAT(网络地址转换)是一种关键的网络技术,通过将内部私有地址转换为外部公网地址,实现多设备共享单一公网IP上网。它不仅解决了IPv4地址不足的问题,还增强了网络安全,隐藏了内部网络结构。NAT主要分为静态NAT、动态NAT和NAPT(网络地址端口转换)三种类型,广泛应用于家庭和企业网络中。然而,NAT也存在对某些应用不友好、增加延迟及与IPv6不兼容等缺点。
834 14
|
关系型数据库 MySQL 数据安全/隐私保护
在 Docker 中部署 Mysql 并挂载配置文件
在 Docker 中部署 Mysql 并挂载配置文件
|
12月前
「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现
本篇将带领你实现一个倒计时和提醒功能的应用,用户可以设置倒计时时间并开始计时。当倒计时结束时,应用会显示提醒。该项目涉及时间控制、状态管理和用户交互,是学习鸿蒙应用开发的绝佳实践项目。
411 2
「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现
|
9月前
|
机器学习/深度学习 编解码 计算机视觉
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
500 10
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
|
消息中间件 NoSQL Kafka
Flink-05 Flink Java 3分钟上手 Redis FlinkJedisPoolConfig 从Kafka写入Redis FlinkKafkaConsumer消费 结果写入Redis
Flink-05 Flink Java 3分钟上手 Redis FlinkJedisPoolConfig 从Kafka写入Redis FlinkKafkaConsumer消费 结果写入Redis
214 0
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
952 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库