- TinyDB教程
- TinyDB - 主页
- TinyDB - 简介
- TinyDB - 环境设置
- TinyDB - 插入数据
- TinyDB - 检索数据
- TinyDB - 更新数据
- TinyDB - 删除数据
- TinyDB - 查询
- TinyDB - 搜索
- TinyDB - where 子句
- TinyDB - Exists() 查询
- TinyDB - Matches() 查询
- TinyDB - Test() 查询
- TinyDB - Any() 查询
- TinyDB - All() 查询
- TinyDB - one_of() 查询
- TinyDB - 逻辑否定
- TinyDB - 逻辑与
- TinyDB - 逻辑或
- TinyDB - 处理数据查询
- TinyDB - 修改数据
- TinyDB - 更新数据
- TinyDB - 检索数据
- TinyDB - 文档ID
- TinyDB - 表
- TinyDB - 默认表
- TinyDB - 缓存查询
- TinyDB - 存储类型
- TinyDB - 中间件
- TinyDB - 扩展TinyDB
- TinyDB - 扩展
- TinyDB 有用资源
- TinyDB - 快速指南
- TinyDB - 有用的资源
- TinyDB - 讨论
TinyDB - 扩展TinyDB
可以扩展 TinyDB 并修改其Behave。有四种方法可以做到这一点 -
定制中间件
定制存储
挂钩和覆盖
子类化 TinyDB 和表
在本章中,我们将详细了解这些方法。
定制中间件
有时用户不想编写新的存储模块。在这种情况下,用户可以修改现有存储模块的Behave。让我们看一个例子,我们将构建一个自定义中间件来过滤掉空项目 -
首先,让我们看看将通过自定义中间件的数据 -
{
'_default': {
1: {'key1': 'value1'},
2: {'key2': 'value2'},
……………,
N: {'keyN': 'valueN'}
},
现在,让我们看看如何实现自定义中间件 -
class RemoveEmptyItemsMiddleware(Middleware):
def __init__(self, storage_cls):
super(self).__init__(storage_cls)
def read(self):
data = self.storage.read()
for _default in data:
st_name = data
for doc_id in table:
item = st_name
if item == {}:
del st_name
return data
def close(self):
self.storage.close()
定制存储
如前所述,TinyDB 具有两种类型的存储:内存存储和 JSON 文件存储。除此之外,TinyDB 还提供了添加我们自己的自定义存储的选项。在下面的示例中,让我们看看如何使用 PyYAML 添加 YAML 存储 -
import yaml class YAMLStorage(Storage): def __init__(self, db.json): self. db.json = db.json
读取文件 -
def read(self):
with open(self.db.json) as handle:
try:
info = yaml.safe_load(handle.read())
return info
except yaml.YAMLError:
return None
写入文件 -
def write(self, info):
with open(self.db.json, 'w+') as handle:
yaml.dump(info, handle)
关闭文件 -
def close(self): pass
挂钩和覆盖
有时,自定义存储和自定义中间件都无法按您想要的方式工作。在这种情况下,用户可以使用预定义的挂钩和覆盖来修改 TinyDB 的Behave。例如,我们将配置默认表的名称,如下所示 -
TinyDB.default_table_name = 'student_detail'
我们还可以分配缓存容量,如下所示 -
TinyDB.table_class.default_query_cache_capacity = 50
子类化 TinyDB 和 Table
这是我们可以用来修改 TinyDB Behave的最后一种方法。例如,我们将创建一个可以与挂钩和覆盖一起使用的子类来覆盖默认类。
Class ExtendTable(Table): TinyDB.table_class = student_detail