更改¶
版本 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
版本 3.0.5¶
发布于 2023-06-21
版本 3.0.4¶
发布于 2023-06-19
版本 3.0.3¶
发布于 2023-01-31
版本 3.0.2¶
发布于 2022-10-14
更新与 SQLAlchemy 2 的兼容性。 #1122
版本 3.0.1¶
发布于 2022-10-11
版本 3.0.0¶
发布于 2022-10-04
不再支持 Python 2、3.4、3.5 和 3.6。
将 Flask 的最低版本提高到 2.2。
将 SQLAlchemy 的最低版本提高到 1.4.18。
移除之前弃用的代码。
会话作用域为当前应用程序上下文,而不是线程。这要求激活应用程序上下文。这可确保在每个请求后清理会话。
始终需要一个活动的 Flask 应用程序上下文才能访问
session
和engine
,无论是否将应用程序传递给构造函数。 #508, #944不同的绑定键使用不同的 SQLAlchemy
MetaData
注册表,从而允许不同数据库中的表具有相同的名称。绑定键存储在结果元数据上并从中查找,而不是在模型或表上。SQLALCHEMY_DATABASE_URI
不会默认为sqlite:///:memory:
。如果既没有它,也没有SQLALCHEMY_BINDS
定义任何引擎,则会引发错误。 #731使用相对路径配置 SQLite 时,相对路径相对于
app.instance_path
,而不是app.root_path
。如果需要,将创建实例文件夹。 #462向扩展对象添加了
get_or_404
、first_or_404
、one_or_404
和paginate
方法。这些方法使用 SQLAlchemy 首选的session.execute(select())
模式,而不是旧查询界面。 #1088创建引擎和会话的设置方法已重命名,并以一个前导下划线开头。它们被认为是可能随时更改的内部接口。
除
app
外,SQLAlchemy
的所有参数都是关键字限定的。将
bind
参数重命名为bind_key
,并从各种SQLAlchemy
方法中删除了app
参数。扩展对象使用
__getattr__
来别名 SQLAlchemy 包中的名称,而不是将其复制为属性。扩展对象直接存储为
app.extensions["sqlalchemy"]
。 #698可以通过在
session_options
参数中传递class_
键来定制会话类。 #327SignallingSession
已重命名为Session
。Session.get_bind
更接近基本实现。模型类和
db
实例在flask shell
中无需导入即可使用。 #1089CamelCase
到snake_case
表名转换器正确处理了更多模式。如果已在数据库中创建的模型发生更改,则可以使用 Alembic 重命名表,或设置__tablename__
以保留旧名称。 #406Model
repr
区分瞬态和待处理的实例。 #967自定义模型类可以使用类参数实现
__init_subclass__
。 #1002db.Table
是一个子类,而不是一个函数。engine_options
参数在每个引擎配置之前作为默认值应用。SQLALCHEMY_BINDS
值可以是引擎 URL,也可以是引擎选项(包括 URL)的字典,用于每个绑定。SQLALCHEMY_DATABASE_URI
和SQLALCHEMY_ENGINE_OPTIONS
对应于None
键,并优先考虑。 #783在调用
init_app
时创建引擎,而不是在首次访问引擎时创建。 #698db.engines
公开当前应用程序的绑定键到引擎的映射。get_engine
、get_tables_for_bind
和get_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
设置默认值。 #803Query
已从BaseQuery
重命名。已添加
Query.one_or_404
。查询类应用于
backref
中的relationship
。 #417手动创建
Pagination
对象不再是公开的 API。它们应该使用db.paginate
或query.paginate
创建。 #1088Pagination.iter_pages
和Query.paginate
参数仅限关键字。Pagination
是可迭代的,可迭代其项目。 #70分页计数查询更高效。
Pagination.iter_pages
更高效。 #622Pagination.iter_pages
right_current
参数是包含的。分页
per_page
不能为 0。 #1091分页
max_per_page
默认为 100。 #1091添加了
Pagination.first
和last
属性,它们提供了页面上第一个和最后一个项目的数量。 #567SQLALCHEMY_RECORD_QUERIES
默认情况下处于禁用状态,并且不会自动启用app.debug
或app.testing
。 #1092get_debug_queries
已重命名为get_recorded_queries
以更好地匹配配置和功能。记录的查询信息是数据类,而不是元组。
context
属性已重命名为location
。查找位置使用更具包容性的检查。SQLALCHEMY_TRACK_MODIFICATIONS
默认情况下处于禁用状态。 #727SQLALCHEMY_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_UNICODE
、SQLALCHEMY_POOL_SIZE
、SQLALCHEMY_POOL_TIMEOUT
、SQLALCHEMY_POOL_RECYCLE
和SQLALCHEMY_MAX_OVERFLOW
。 #684get_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 日发布
版本 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_class
和model_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.relation
、db.relationship
和db.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¶
首次公开发布