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_name
db_table_func
已更改为table_function
order_by
已被移除(用于指定要应用于 SELECT 查询的默认排序)。validate_backrefs
已被移除。不再验证反向引用。
模型
BaseModel
已重命名为ModelBase
现在使用
__data__
而不是_data
访问原始模型数据已移除
_prepare_instance()
模型方法。已移除
sqlall()
方法,该方法输出 DDL 语句以生成模型及其关联的索引。
字段
db_column
已更改为column_name
db_field
类属性已更改为field_type
(如果您正在实现自定义字段子类,则使用)model_class
属性已更改为model
PrimaryKeyField
已重命名为AutoField
ForeignKeyField
构造函数具有以下更改rel_model
已更改为model
to_field
已更改为field
related_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
已更改为_returning
naive()
方法现在是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
中
berkeleydb
csv_utils
djpeewee
gfk
kv
pskel
read_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 代码库中。