Tinydb 简明教程
TinyDB - Extend TinyDB
可以扩展 TinyDB 并修改其行为。有四种方法可以做到:
-
Custom middleware
-
Custom storages
-
Hooks and overrides
-
Subclassing TinyDB and table
在本章中,我们将详细了解每种方法。
Custom Middleware
有时用户不想编写新的存储模块。在这种情况下,用户可以修改现有存储模块的行为。让我们来看一个示例,其中我们将构建一个用于过滤空项的自定义中间件:
首先,让我们查看将通过自定义中间件的数据:
{
'_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()
Custom Storage
如前所述,TinyDB 随附两种类型的存储:内存中存储和 JSON 文件存储。除此之外,TinyDB 还提供了一个选项以添加我们自己的自定义存储。在以下示例中,让我们看看如何使用 PyYAML 添加 YAML 存储:
import yaml
class YAMLStorage(Storage):
def __init__(self, db.json):
self. db.json = db.json
To read the file −
def read(self):
with open(self.db.json) as handle:
try:
info = yaml.safe_load(handle.read())
return info
except yaml.YAMLError:
return None
To write the file −
def write(self, info):
with open(self.db.json, 'w+') as handle:
yaml.dump(info, handle)
To close the file −
def close(self):
pass