3.0 中的更改
此文档介绍从 2.x 切换到 3.x 时需要注意的更改。
向后不兼容
我已尽可能地保持更改向后兼容。在某些地方,已更改的 API 将触发 DeprecationWarning。
数据库
get_conn()已更改为Database.connection()get_cursor()已更改为Database.cursor()execution_context()已被替换为直接将数据库实例用作上下文管理器。对于不带事务的连接上下文,请使用
Database.connection_context()。Database.create_tables()和Database.drop_tables(),以及Model.create_table()和Model.drop_table()全部默认设置为safe=True(create_table将在不存在时创建,drop_table将在存在时删除)。connect_kwargs属性已重命名为connect_params自定义字段类型定义的初始化参数已从
fields更改为field_types。
模型元选项
db_table已更改为table_namedb_table_func已更改为table_functionorder_by已被移除(用于指定要应用于 SELECT 查询的默认排序)。validate_backrefs已被移除。不再验证反向引用。
模型
BaseModel已重命名为ModelBase现在使用
__data__而不是_data访问原始模型数据已移除
_prepare_instance()模型方法。已移除
sqlall()方法,该方法输出 DDL 语句以生成模型及其关联的索引。
字段
db_column已更改为column_namedb_field类属性已更改为field_type(如果您正在实现自定义字段子类,则使用)model_class属性已更改为modelPrimaryKeyField已重命名为AutoFieldForeignKeyField构造函数具有以下更改rel_model已更改为modelto_field已更改为fieldrelated_name已更改为backref
ManyToManyField现在包含在主peewee.py模块中已移除扩展字段
PasswordField、PickledField和AESEncryptedField。
查询
JOIN_INNER、JOIN_LEFT_OUTER 等现在是 JOIN.INNER、JOIN.LEFT_OUTER 等。
包含查询结果包装器实现的 C 扩展已删除。
此外,Select.aggregate_rows() 已删除。此助手用于对左连接查询进行去重,以便在迭代模型及其关系时显示效率。实际上,代码的复杂性和其有限的实用性让我决定放弃它。您可改用 prefetch() 来实现相同的结果。
Select查询属性_select已更改为_returningnaive()方法现在是objects(),其默认使用模型类作为构造器,但接受任何可调用函数用作备用构造器。annotate()查询方法不再受支持。
Case() 助手已从 playhouse.shortcuts 模块移至 peewee 主模块。
cast() 方法不再是函数,而是所有类似列的对象上的方法。
InsertQuery.return_id_list() 方法已被使用 _WriteQuery.returning() 的更通用模式所取代。
InsertQuery.upsert() 方法已被更通用且灵活的 Insert.on_conflict() 方法所取代。
使用 prefetch() 时,收集的实例将存储在与外键的 backref 相同的属性中。以前,您将使用 (backref)_prefetch 访问已连接的实例。
SQL 对象用于创建可组合的 SQL 字符串,现在期望第二个参数是参数的列表/元组。
已删除的扩展
以下扩展不再包含在 playhouse 中
berkeleydbcsv_utilsdjpeeweegfkkvpskelread_slave
SQLite 扩展
SQLite 扩展模块的 VirtualModel 类接受略有不同的 Meta 选项
arguments- 用于指定在虚拟表上定义的任何列之后附加的任意参数。应为字符串列表。extension_module(未更改)options(替换extension_options) - 虚拟表的任意选项,出现在列和arguments之后。prefix_arguments- 应出现在虚拟表声明中的任何参数或列之前的字符串列表。
因此,在为虚拟表声明模型时,它将大致这样构建
CREATE VIRTUAL TABLE "table name" USING extension_module (
prefix arguments,
field definitions,
arguments,
options)
Postgresql 扩展
PostgresqlExtDatabase 不再默认注册 hstore 扩展。要在 3.0 及更高版本中使用 hstore 扩展,请在初始化数据库对象时传递 register_hstore=True。
信号扩展
已删除 post_init 信号。
新内容
查询生成器已从头开始重写,以提高灵活性和功能。现在有一个通用的 低级 API 用于构建查询。
SQLite
许多特定于 SQLite 的功能已从 playhouse.sqlite_ext 模块移至 peewee,例如
用户定义函数、聚合、排序规则和表函数。
加载扩展。
指定编译指令。
有关更多详细信息,请参阅 “使用 SQLite”部分 和 “SQLite 扩展” 文档。
SQLite 扩展
来自 sqlite-vtfunc 的虚拟表实现已合并到 peewee 代码库中。