Peewee 简明教程

Peewee - SQLite Extensions

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

Features of SQLite Extensions

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

  1. Full-text search.

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

  3. Closure table extension support.

  4. LSM1 extension support.

  5. User-defined table functions.

  6. 通过备份 API 备份至文件 backup_to_file() 支持在线备份。

  7. 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 以确保主键始终呈单调递增,而不论是否删除行。

playhouse 命名空间 (playhouse.sqliteq) 中的 SqliteQ 模块定义了 SqliteExeDatabase 的一个子类,以处理对 SQLite 数据库的序列化并发写操作。

另一方面,playhouse.apsw 模块提供了对 apsw sqlite 驱动的支持。另一个 Python SQLite 封装器 (APSW) 速度快且可以处理嵌套事务,而这些事务是由你的代码显式管理的。

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

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

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