Peewee - SQLite 扩展


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

SQLite 扩展的特点

Peewee 支持的 SQLite 扩展的功能如下:

  • 全文搜索。

  • 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 会将所有列类型视为文本(尽管您可以存储其他数据类型,Sqlite 会将它们视为文本)。

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

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