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** 的一个子类,可在 https://peewee.org.cn/en/latest/peewee/sqlite_ext.html#VirtualModel 中使用,用于 FTS3 和 FTS4 全文搜索扩展。Sqlite 将所有列类型视为 TEXT(尽管您可以存储其他数据类型,Sqlite 将将其视为文本)。

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

SqliteDatabase 支持 AutoField 用于增加主键。但是,SqliteExtDatabase 支持 AutoIncrementField 以确保主键始终单调递增,而不管行是否被删除。

playhouse 命名空间中的 SqliteQ 模块 (playhouse.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()
广告
© . All rights reserved.