3.0 中的更改

此文档介绍从 2.x 切换到 3.x 时需要注意的更改。

向后不兼容

我已尽可能地保持更改向后兼容。在某些地方,已更改的 API 将触发 DeprecationWarning

数据库

模型元选项

  • 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 模块中

  • 已移除扩展字段 PasswordFieldPickledFieldAESEncryptedField

查询

JOIN_INNERJOIN_LEFT_OUTER 等现在是 JOIN.INNERJOIN.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 代码库中。

  • 支持 SQLite 在线备份 API。

  • Murmurhash 实现已更正。

  • BM25 排名代码中的几个小怪癖已得到解决。

  • 现在包括用于哈希和排名的众多用户定义函数。

  • BloomFilter 实现。

  • 增量 Blob I/O 支持。

  • 支持更新、提交和回滚挂钩。

  • LSMTable 实现支持 lsm1 扩展。