Peewee - SQLite 扩展

Peewee 带有一个 Playhouse 命名空间。 它是各种扩展模块的集合。 其中之一是 playhouse.sqlite_ext 模块。 主要定义了继承SqliteDatabase类的SqliteExtDatabase类,支持如下附加功能 −


SQLite扩展的特性

Peewee支持的SQLite Extensions特性如下 −

  • 全文搜索。

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

  • 闭包表扩展支持。

  • LSM1 扩展支持。

  • 用户定义的表函数。

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

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

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

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

要激活全文搜索,模型可以有 DocIdField 来定义主键。

class NoteIndex(FTSModel):
   docid = DocIDField()
   content = SearchField()

   class Meta:
      database = db

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

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

SqliteDatabase 支持 AutoField 来增加主键。 但是,SqliteExtDatabase 支持 AutoIncrementField 以确保 primary 总是单调递增,而不管行删除。

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()