sveltest
中的数据缓存类似于redis
,一个key-value
的数据库,但是这里的value
不限定类型,可以是Python
中任意的数据类型,也可以是自己定义的数据类型。都是no SQL
相当于一个轻量型的数据库。
无需服务端即可在本地实现数据持久化。
提供了相对应的增删改查操作API,使用起来也非常简单。
实例化ShelveBase
小知识
sveltest
中提供的数据持久化有二个相关方案,一个是默认的持久化方案即直接初始化ShelveBase
任何操作都不需要,创建的数据库文件存在于sveltest
提供的默认路径。另一个则是自定义存储方案,自己定义数据库存放的路径
实例
data_cache = ShelveBase()
相关参数
def __init__(
self,filename:Optional[str]=None,
flag:str="c",
protocol:Optional[Union[bool,int]]=None,
writeback:Optional[bool]=False
)
参数名 | 类型 | 说明 |
---|---|---|
filename | str | 数据库存放路径,可不传入则使用sveltest 默认的存储方案 |
flag | str | 可选参数flag,默认为‘c’如果数据文件不存在,就创建,允许读写;可以是: r - 只读 w -可写 n-可读写; 每次调用open()都重新创建一个空的文件,可读写 |
protocol | bool,int | 是序列化模式,默认值为None。protocol的值可以是1或2,表示以二进制的形式序列化 |
writeback | bool | writeback:默认为False。当设置为True以后,shelf将会将所有从DB中读取的对象存放到一个内存缓存。 |
writeback 相关说明
writeback:默认为False。当设置为True以后,shelf将会将所有从DB中读取的对象存放到一个内存缓存。当我们close()打开的shelf的时候,缓存中所有的对象会被重新写入DB。
writeback方式有优点也有缺点。
优点是减少了我们出错的概率,并且让对象的持久化对用户更加的透明了;但这种方式并不是所有的情况下都需要,首先,使用writeback以后,shelf在open()的时候会增加额外的内存消耗,并且当DB在close()的时候会将缓存中的每一个对象都写入到DB,这也会带来额外的等待时间。因为shelve没有办法知道缓存中哪些对象修改了,哪些对象没有修改,因此所有的对象都会被写入。
注意:为了保存增、删、改的内容,建议显示的标明writeback=True。
自定义存储方案
data_cache = ShelveBase(filename="cache")
执行后会在当前脚本目录下创建三个文件:
这三个文件则是数据库相关的文件,你可能需要保护好它们。
添加数据
add()
方法可以进行创建一个key并且还能给key赋值,并且如果改key存在则可当做update操作更新它的值。
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)
相关参数说明
def add(self,k:Optional[str],v:Optional[Any]) -> bool:
# k 为key相当于MySQL中的字段 v为值 可以是Python任意类型
返回值
创建成功则返回 True,失败则False
获取key值
通过get()
方法可以查看存在的key的值
print(data_cache.get("sveltest"))
print(data_cache.get("自动化测试"))
print(data_cache.get("obj"))
print(data_cache.get("data"))
相关参数说明
def get(self,k:Optional[str]):
#k 为key
返回值
key存在数据库则返回 key的值,不存在则返回None
检查key是否存在
使用exists()
方法可检查一个key是否存在
print(data_cache.exists("sveltest"))
print(data_cache.exists("自动化测试"))
print(data_cache.exists("obj"))
print(data_cache.exists("data"))
删除一个key
使用delete()
可对一个存在的key进行删除操作
print(data_cache.delete("sveltest"))
print(data_cache.delete("自动化测试"))
print(data_cache.delete("obj"))
print(data_cache.delete("data"))
返回值
key存在数据库则删除成功返回True,不存在则删除失败返回False
删除数据库/清空数库
使用clear()
方法可进行删除数据库并且删除所有相关文件
data_cache.clear() #默认方案时可使用该方法进行清空
data_cache.clear(path="cache") #自定义方案时使用,清空指定目录下的数据库文件
关闭数据库
可以使用quit()
方法来关闭数据库,关闭了数据库则无法对数据进行操作,需要时则可重新实例化ShelveBase
即可重新操作数据库
data_cache.quit()