Peewee SQLite 扩展


Peewee 带有一个 Playhouse 命名空间。它是各种扩展模块的集合。其中一个是 playhouse.sqlite_ext 模块。它主要定义 SqliteExt 数据库 继承SqliteDatabase类的类,支持以下附加功能:

SQLite 扩展的特点


Peewee 支持的 SQLite Extensions 的功能如下:

  • 全文搜索。

  • JavaScript 对象表示法 (JSON) 扩展集成。

  • 闭包表扩展支持。

  • LSM1 扩展支持。

  • 用户定义的表函数。

  • 使用备份 API 支持在线备份:backup_to_file()。

  • BLOB API 支持,用于高效的二进制数据存储。

可以存储 JSON 数据,如果特殊 JSON字段 被声明为字段属性之一。

class MyModel(Model):
    json_data = JSONField(json_dumps=my_json_dumps)

要激活全文搜索,模型可以具有 DocId 字段 定义主键。

class 注意Index(FTSModel):
    docid = DocIDField()
    content = SearchField()

    class Meta:
        database = db

FTSModel 是 虚拟模型 可在 http://docs.peewee-orm.com/en/latest/peewee/sqlite_ext.html#VirtualModel 与 FTS3 和 FTS4 全文搜索扩展一起使用。 Sqlite 会将所有列类型视为 TEXT(尽管你可以存储其他数据类型,Sqlite 会将它们视为文本)。

SearchField 是一个字段类,用于表示全文搜索虚拟表的模型上的列。

SqliteDatabase 支持 AutoField 增加主键。但是,SqliteExtDatabase 支持 AutoIncrementField 以确保主节点始终单调增加,而与行删除无关。

playhouse 命名空间 (playhouse.sqliteq) 中的 SqliteQ 模块定义了 SqliteExeDatabase 的子类来处理对 SQlite 数据库的序列化并发写入。

另一方面,playhouse.apsw 模块支持 apsw sqlite 驱动程序。另一个 Python SQLite Wrapper (APSW) 速度很快,可以处理嵌套事务,这些事务由你的代码显式管理。

from apsw_ext import *
db = APSWDatabase('testdb')

class BaseModel(Model):
    class Meta:
        database = db

class MyModel(BaseModel):
    field1 = CharField()
    field2 = DateTimeField()