更改

版本 3.1.2

  • 修复在没有默认引擎的情况下调用 repr()SQLAlchemy 实例上的问题。 #1295

版本 3.1.1

发布于 2023-09-11

  • 弃用 __version__ 属性。改为使用特性检测或 importlib.metadata.version("flask-sqlalchemy")#5230

版本 3.1.0

发布于 2023-09-11

  • 不再支持 Python 3.7。 #1251

  • 通过 model_class 参数添加对 SQLAlchemy 2.x API 的支持。 #1140

  • 将 SQLAlchemy 的最低版本提升至 2.0.16。

  • 移除之前弃用的代码。

  • get_or_404 中的额外关键字参数传递给 session.get#1149

  • 修复查找从句语句的正确绑定键的 bug。 #1211

版本 3.0.5

发布于 2023-06-21

  • Pagination.next() 强制执行 max_per_page#1201

  • 改进 get_or_404 返回值的类型提示,使其为非可选。 #1226

版本 3.0.4

发布于 2023-06-19

  • 修复 get_or_404 返回值的类型提示。 #1208

  • 修复 pyright 的类型提示(VS Code Pylance 扩展使用)。 #1205

版本 3.0.3

发布于 2023-01-31

  • 当错误地为同一应用程序使用多个 SQLAlchemy 实例,或未调用 init_app 时,显示有用的错误。 #1151

  • 修复获取与使用多态表继承的模型关联的引擎的问题。 #1155

版本 3.0.2

发布于 2022-10-14

  • 更新与 SQLAlchemy 2 的兼容性。 #1122

版本 3.0.1

发布于 2022-10-11

  • 导出类型信息,而不是使用外部 typeshed 定义。 #1112

  • 如果设置了默认引擎选项,但未设置 SQLALCHEMY_DATABASE_URI,则不会配置无效的默认绑定。 #1117

版本 3.0.0

发布于 2022-10-04

  • 不再支持 Python 2、3.4、3.5 和 3.6。

  • 将 Flask 的最低版本提高到 2.2。

  • 将 SQLAlchemy 的最低版本提高到 1.4.18。

  • 移除之前弃用的代码。

  • 会话作用域为当前应用程序上下文,而不是线程。这要求激活应用程序上下文。这可确保在每个请求后清理会话。

  • 始终需要一个活动的 Flask 应用程序上下文才能访问 sessionengine,无论是否将应用程序传递给构造函数。 #508, #944

  • 不同的绑定键使用不同的 SQLAlchemy MetaData 注册表,从而允许不同数据库中的表具有相同的名称。绑定键存储在结果元数据上并从中查找,而不是在模型或表上。

  • SQLALCHEMY_DATABASE_URI 不会默认为 sqlite:///:memory:。如果既没有它,也没有 SQLALCHEMY_BINDS 定义任何引擎,则会引发错误。 #731

  • 使用相对路径配置 SQLite 时,相对路径相对于 app.instance_path,而不是 app.root_path。如果需要,将创建实例文件夹。 #462

  • 向扩展对象添加了 get_or_404first_or_404one_or_404paginate 方法。这些方法使用 SQLAlchemy 首选的 session.execute(select()) 模式,而不是旧查询界面。 #1088

  • 创建引擎和会话的设置方法已重命名,并以一个前导下划线开头。它们被认为是可能随时更改的内部接口。

  • app 外,SQLAlchemy 的所有参数都是关键字限定的。

  • bind 参数重命名为 bind_key,并从各种 SQLAlchemy 方法中删除了 app 参数。

  • 扩展对象使用 __getattr__ 来别名 SQLAlchemy 包中的名称,而不是将其复制为属性。

  • 扩展对象直接存储为 app.extensions["sqlalchemy"]#698

  • 可以通过在 session_options 参数中传递 class_ 键来定制会话类。 #327

  • SignallingSession 已重命名为 Session

  • Session.get_bind 更接近基本实现。

  • 模型类和 db 实例在 flask shell 中无需导入即可使用。 #1089

  • CamelCasesnake_case 表名转换器正确处理了更多模式。如果已在数据库中创建的模型发生更改,则可以使用 Alembic 重命名表,或设置 __tablename__ 以保留旧名称。 #406

  • Model repr 区分瞬态和待处理的实例。 #967

  • 自定义模型类可以使用类参数实现 __init_subclass__#1002

  • db.Table 是一个子类,而不是一个函数。

  • engine_options 参数在每个引擎配置之前作为默认值应用。

  • SQLALCHEMY_BINDS 值可以是引擎 URL,也可以是引擎选项(包括 URL)的字典,用于每个绑定。 SQLALCHEMY_DATABASE_URISQLALCHEMY_ENGINE_OPTIONS 对应于 None 键,并优先考虑。 #783

  • 在调用 init_app 时创建引擎,而不是在首次访问引擎时创建。 #698

  • db.engines 公开当前应用程序的绑定键到引擎的映射。

  • get_engineget_tables_for_bindget_binds 已弃用。

  • 支持类似于 sqlite:///file:name.db?uri=true 的 SQLite 驱动程序级 URI。 #998#1045

  • 如果 pool_size 为 0,则 SQLite 引擎不会使用 NullPool

  • 默认情况下,MySQL 引擎使用“utf8mb4”字符集。 #875

  • MySQL 引擎不会将 pool_size 设置为 10。

  • 如果不使用队列池,则 MySQL 引擎不会为 pool_recycle 设置默认值。 #803

  • Query 已从 BaseQuery 重命名。

  • 已添加 Query.one_or_404

  • 查询类应用于 backref 中的 relationship#417

  • 手动创建 Pagination 对象不再是公开的 API。它们应该使用 db.paginatequery.paginate 创建。 #1088

  • Pagination.iter_pagesQuery.paginate 参数仅限关键字。

  • Pagination 是可迭代的,可迭代其项目。 #70

  • 分页计数查询更高效。

  • Pagination.iter_pages 更高效。 #622

  • Pagination.iter_pages right_current 参数是包含的。

  • 分页 per_page 不能为 0。 #1091

  • 分页 max_per_page 默认为 100。 #1091

  • 添加了 Pagination.firstlast 属性,它们提供了页面上第一个和最后一个项目的数量。 #567

  • SQLALCHEMY_RECORD_QUERIES 默认情况下处于禁用状态,并且不会自动启用 app.debugapp.testing#1092

  • get_debug_queries 已重命名为 get_recorded_queries 以更好地匹配配置和功能。

  • 记录的查询信息是数据类,而不是元组。 context 属性已重命名为 location。查找位置使用更具包容性的检查。

  • SQLALCHEMY_TRACK_MODIFICATIONS 默认情况下处于禁用状态。 #727

  • SQLALCHEMY_COMMIT_ON_TEARDOWN 已弃用。它会导致各种设计问题,难以调试。直接调用 db.session.commit()#216

版本 2.5.1

发布于 2021-03-18

  • 修复与 Python 2.7 的兼容性。

版本 2.5.0

发布于 2021-03-18

  • 更新以支持 SQLAlchemy 1.4。

  • SQLAlchemy URL 对象是不可变的。一些内部方法已更改为返回一个新的 URL,而不是 None#885

版本 2.4.4

发布于 2020-07-14

  • 将元混合类的基类更改为 type。这修复了 CPython 3.8.4 中回归导致的问题。 #852

版本 2.4.3

发布于 2020-05-26

  • 弃用 SQLALCHEMY_COMMIT_ON_TEARDOWN,因为它会导致各种设计问题,难以调试。直接调用 db.session.commit()#216

版本 2.4.2

发布于 2020-05-25

  • 修复记录被重复时分页错误。 #812

版本 2.4.1

发布于 2019-09-24

  • 修复在多绑定中使用多态模型时出现的 AttributeError#651

版本 2.4.0

发布于 2019-04-24

  • 不再支持 Python 2.6 和 3.3。 #687

  • 解决 SQLAlchemy 1.3 弃用问题。 #684

  • 使引擎配置更灵活。添加了 engine_options 参数和 SQLALCHEMY_ENGINE_OPTIONS 配置。弃用了单独的引擎选项配置键 SQLALCHEMY_NATIVE_UNICODESQLALCHEMY_POOL_SIZESQLALCHEMY_POOL_TIMEOUTSQLALCHEMY_POOL_RECYCLESQLALCHEMY_MAX_OVERFLOW#684

  • get_or_404()first_or_404() 现在接受 description 参数以控制 404 消息。 #636

  • 在 Windows 上的 Python 3 中使用 time.perf_counter#638

  • 添加了 Flask 教程项目 Flaskr 的示例,该示例已针对 Flask-SQLAlchemy 进行了调整。 #720

版本 2.3.2

2017 年 10 月 11 日发布

  • 不要掩盖单表继承模型的父表。 #561

版本 2.3.1

2017 年 10 月 5 日发布

  • 如果模型的表名与元数据中现有的表名匹配,则使用该表。修复了反射表未被模型选取的回归问题。 #551

  • 当模型具有表名但没有主键时,引发正确的错误。 #556

  • 修复了对尚未刷新因此没有标识的模型的 repr#555

  • 允许指定分页的 max_per_page 限制,以避免用户在请求参数中指定高值。 #542

  • 对于带有 error_out=Falsepaginatepage 的最小值为 1,per_page 的最小值为 0。 #558

版本 2.3.0

发布于 2017-09-28

  • 修复了 __tablename__ 生成中的多个错误。将为定义主键的模型生成名称,但不会为单表继承子类生成名称。名称不会覆盖 declared_attr。检测到 PrimaryKeyConstraint#541

  • 将现有的 declarative_base() 作为 model_class 传递给 SQLAlchemy.__init__ 将使用它作为基类,而不是创建一个基类。这允许自定义用于构建基类的元类。 #546

  • 扩展用于绑定和表名生成的未记录 DeclarativeMeta 内部已重构为以混合方式工作。添加了有关如何创建不执行表名生成的自定义元类的文档。 #546

  • 模型和元类代码已移至新的 models 模块。 _BoundDeclarativeMeta 重命名为 DefaultMeta;旧名称将在 3.0 中删除。 #546

  • 模型具有显示模型名称和主键的默认 repr#530

  • 修复了一个错误,其中使用 init_app 会导致连接器始终使用 current_app,而不是为其创建的应用程序。当多个应用程序在扩展中注册时,这会导致问题。 #547

版本 2.2

发布于 2017-02-27,代号 Dubnium

  • 由于使用了 sqlalchemy.inspect,最低 SQLAlchemy 版本为 0.8。

  • 添加了对自定义 query_classmodel_class 作为 SQLAlchemy 构造函数参数的支持。 #328

  • 允许在 db.session 上监听 SQLAlchemy 事件。 #364

  • 允许在抽象模型上使用 __bind_key__#373

  • 允许 SQLALCHEMY_ECHO 为字符串。 #409

  • SQLALCHEMY_DATABASE_URI 未设置时发出警告。 #443

  • 不允许分页生成无效的页码。 #460

  • 放弃对 Flask < 0.10 的支持。这意味着数据库会话始终与应用程序上下文及其终止事件相关联。 #461

  • 表名生成逻辑不再访问类属性,除非它们是 declared_attr#467

版本 2.1

于 2015-10-23 发布,代号为 Caesium

  • 在更多情况下自动生成表名,包括子类化混合和抽象模型。

  • 允许使用自定义 MetaData 对象。

  • 添加对会话绑定参数的支持。

版本 2.0

于 2014-08-29 发布,代号为 Bohrium

  • 更改了内置信号的订阅方式,以跳过非 Flask-SQLAlchemy 会话。这也将修复有关模型更改不存在的属性错误。

  • 添加了一种控制如何跟踪模型修改信号的方法。

  • SignallingSession 设置为公共接口,并添加了一个用于自定义会话创建的钩子。

  • 如果将 bind 参数提供给信令会话,它将不再导致参数被提供两次的错误。

  • 添加了工作表反射支持。

  • 默认启用自动刷新。

  • 认为 SQLALCHEMY_COMMIT_ON_TEARDOWN 有害,并从文档中删除。

版本 1.0

2013 年 7 月 20 日发布,代号 Aurum

  • 添加了 Python 3.3 支持。

  • 放弃了 Python 2.5 兼容性。

  • 各种错误修复。

  • 将版本格式更改为现在对每次更新进行主要版本发布。

版本 0.16

  • 新的分发格式 (flask_sqlalchemy)。

  • 添加了对 Flask 0.9 规范的支持。

版本 0.15

  • 添加了对多个数据库的会话支持。

版本 0.14

  • 使相对 sqlite 路径相对于应用程序根目录。

版本 0.13

  • 修复了 Flask-SQLAlchemy 未选择正确绑定项的问题。

版本 0.12

  • 添加了对多个数据库的支持。

  • BaseQuery 作为 db.Query 暴露。

  • db.relationdb.relationshipdb.dynamic_loader 的默认 query_class 设置为 BaseQuery

  • 提高了与 Flask 0.7 的兼容性。

版本 0.11

  • 修复了 0.10 中引入的替代表构造函数中的错误。

版本 0.10

  • 添加了对信号的支持。

  • 除非被覆盖,否则表名现在会自动从类名设置。

  • Model.query 现在始终适用于直接传递给 SQLAlchemy 构造函数的应用程序。此外,该属性现在会引发 RuntimeError,而不是 None

  • 向构造函数中添加了会话选项。

  • 修复了损坏的 __repr__

  • db.Table 现在是一个创建表对象的工厂函数。这使得可以省略元数据。

版本 0.9

  • 应用更改以通过 Flask 扩展批准流程。

版本 0.8

  • 添加了一些用于创建连接的配置键。

  • 自动激活 MySQL 连接的连接回收。

  • 添加了对 Flask 测试模式的支持。

版本 0.7

  • 首次公开发布