Skip to content
On this page

sveltest中的数据缓存类似于redis,一个key-value的数据库,但是这里的value不限定类型,可以是Python中任意的数据类型,也可以是自己定义的数据类型。都是no SQL相当于一个轻量型的数据库。

无需服务端即可在本地实现数据持久化。

提供了相对应的增删改查操作API,使用起来也非常简单。

实例化ShelveBase

小知识

sveltest 中提供的数据持久化有二个相关方案,一个是默认的持久化方案即直接初始化ShelveBase任何操作都不需要,创建的数据库文件存在于sveltest提供的默认路径。另一个则是自定义存储方案,自己定义数据库存放的路径

实例

python
data_cache = ShelveBase()

相关参数

python
def __init__(
    self,filename:Optional[str]=None,
    flag:str="c",
    protocol:Optional[Union[bool,int]]=None,
    writeback:Optional[bool]=False
)
参数名类型说明
filenamestr数据库存放路径,可不传入则使用sveltest默认的存储方案
flagstr可选参数flag,默认为‘c’如果数据文件不存在,就创建,允许读写;可以是: r - 只读 w -可写 n-可读写; 每次调用open()都重新创建一个空的文件,可读写
protocolbool,int是序列化模式,默认值为None。protocol的值可以是1或2,表示以二进制的形式序列化
writebackboolwriteback:默认为False。当设置为True以后,shelf将会将所有从DB中读取的对象存放到一个内存缓存。

writeback 相关说明

writeback:默认为False。当设置为True以后,shelf将会将所有从DB中读取的对象存放到一个内存缓存。当我们close()打开的shelf的时候,缓存中所有的对象会被重新写入DB。

writeback方式有优点也有缺点。

优点是减少了我们出错的概率,并且让对象的持久化对用户更加的透明了;但这种方式并不是所有的情况下都需要,首先,使用writeback以后,shelf在open()的时候会增加额外的内存消耗,并且当DB在close()的时候会将缓存中的每一个对象都写入到DB,这也会带来额外的等待时间。因为shelve没有办法知道缓存中哪些对象修改了,哪些对象没有修改,因此所有的对象都会被写入。

注意:为了保存增、删、改的内容,建议显示的标明writeback=True。

自定义存储方案

python
data_cache = ShelveBase(filename="cache")

执行后会在当前脚本目录下创建三个文件:

img

这三个文件则是数据库相关的文件,你可能需要保护好它们。

添加数据

add()方法可以进行创建一个key并且还能给key赋值,并且如果改key存在则可当做update操作更新它的值。

python
data_cache = ShelveBase(filename="cache")
# 添加key值为字典类型
data_cache.add(k="sveltest",v={"name":"自动化测试","type":0})
# 添加key值为字符串类型
data_cache.add(k="自动化测试",v="sveltest框架")
# 添加key值为Python的一个object类型
data_cache.add(k="obj",v=data_cache)

相关参数说明

python
def add(self,k:Optional[str],v:Optional[Any]) -> bool:
    # k 为key相当于MySQL中的字段 v为值 可以是Python任意类型

返回值

创建成功则返回 True,失败则False

获取key值

通过get()方法可以查看存在的key的值

python
print(data_cache.get("sveltest"))
print(data_cache.get("自动化测试"))
print(data_cache.get("obj"))
print(data_cache.get("data"))

相关参数说明

python
def get(self,k:Optional[str]):
    #k 为key

返回值

key存在数据库则返回 key的值,不存在则返回None

img

检查key是否存在

使用exists()方法可检查一个key是否存在

python
print(data_cache.exists("sveltest"))
print(data_cache.exists("自动化测试"))
print(data_cache.exists("obj"))
print(data_cache.exists("data"))

img

删除一个key

使用delete()可对一个存在的key进行删除操作

python
print(data_cache.delete("sveltest"))
print(data_cache.delete("自动化测试"))
print(data_cache.delete("obj"))
print(data_cache.delete("data"))

返回值

key存在数据库则删除成功返回True,不存在则删除失败返回False

删除数据库/清空数库

使用clear()方法可进行删除数据库并且删除所有相关文件

python
data_cache.clear() #默认方案时可使用该方法进行清空
data_cache.clear(path="cache") #自定义方案时使用,清空指定目录下的数据库文件

关闭数据库

可以使用quit()方法来关闭数据库,关闭了数据库则无法对数据进行操作,需要时则可重新实例化ShelveBase即可重新操作数据库

python
data_cache.quit()