3的变化

本文档描述了从2.x切换到3.x时需要注意的更改。

向后不兼容

我尽量使更改向后兼容。在某些地方,已更改的API将触发 DeprecationWarning .

数据库

模型元选项

  • db_table has changed to table_name
  • db_table_func has changed to table_function
  • order_by 已删除(用于指定要应用于选择查询的默认顺序)。
  • validate_backrefs 已删除。反向引用不再有效。

模型

  • BaseModel has been renamed to ModelBase
  • 访问原始模型数据现在使用 __data__ 而不是 _data
  • 这个 _prepare_instance() 模型方法已删除。
  • 这个 sqlall() 方法已被移除,该方法输出DDL语句以生成模型及其关联索引。

领域

  • db_column has changed to column_name
  • db_field 类属性更改为 field_type (在实现自定义字段子类时使用)
  • model_class attribute has changed to model
  • PrimaryKeyField has been renamed to AutoField
  • ForeignKeyField 构造函数有以下更改:
    • rel_model has changed to model
    • to_field has changed to field
    • related_name has changed to backref
  • ManyToManyField 现在包含在主目录中 peewee.py 模块
  • 已删除扩展字段 PasswordFieldPickledFieldAESEncryptedField .

查询

JOIN_INNERJOIN_LEFT_OUTER 等现在 JOIN.INNERJOIN.LEFT_OUTER 等。

已删除包含查询结果包装器实现的C扩展。

此外, Select.aggregate_rows() 已删除。这个助手被用来消除左连接查询的重复,以在迭代模型及其关系时提供效率的外观。在实践中,代码的复杂性及其有限的实用性说服了我放弃它。你可以用 prefetch() 达到同样的效果。

  • Select query attribute _select has changed to _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 默认情况下的扩展。使用 hstore 3.0及以后的扩展,通过 register_hstore=True 初始化数据库对象时。

信号扩展

这个 post_init 信号已被删除。

新材料

查询生成器已经从一开始就被重新编写,以便更加灵活和强大。现在有一个通用的, lower-level API 用于构造查询。

SQLite

许多特定于sqlite的功能已从 playhouse.sqlite_ext 模块化为 peewee ,例如:

  • 用户定义的函数、聚合、排序和表函数。
  • 正在加载扩展。
  • 指定pragma。

"Using SQLite" section"SQLite extensions" 有关详细信息,请参阅文档。

sqlite扩展

来自的虚拟表实现 sqlite-vtfunc 已折叠到Peewee代码库中。

  • 支持SQLite在线备份API。
  • 杂音哈希实现已更正。
  • BM25排名代码中的几个小问题已经解决。
  • 现在包含了许多用于散列和排名的用户定义函数。
  • BloomFilter 实施。
  • 增量 Blob 输入输出支持。
  • 支持更新、提交和回滚挂钩。
  • LSMTable 实现以支持LSM1扩展。