Kivy - Storage 类
Kivy 框架中的 Storage 类用于通过索引条目加载和存储任意数量的键值对。"kivy.storage"模块定义了 AbstractStore 类。其实现 − DictStore、JsonStore 和 RedisStore −提供具体的类。
kivy.storage.dictstore.DictStore:使用 python 字典作为存储。
kivy.storage.jsonstore.JsonStore:使用 JSON 文件作为存储。
kivy.storage.redisstore.RedisStore:使用带有 redis-py 的 Redis 数据库。
要使用上述任何存储类,请导入相关类,声明一个对象并调用其 put() 方法来存储 k-v 对。对于 JsonStore −
from kivy.storage.jsonstore import JsonStore store = JsonStore('hello.json') # 放入一些值 store.put(name, key1=val1, key2=val2)
这将在当前目录中创建 hello.json 文件。您可以使用 get() 方法检索信息。
print (store.get(name)[key])
以下方法在 AbstractStore 类中定义,需要由具体实现(如 DictStore −)覆盖
clear() −清除整个存储。
count() − 返回存储中的条目数。
delete(key) − 从存储中删除一个键。如果未找到该键,则会引发 KeyError 异常。
exists(key) − 检查存储中是否存在键。
find(**filters) − 返回与过滤器匹配的所有条目。这些条目通过生成器作为 (key, entry) 对的列表返回,其中 entry 是键值对的字典。
get(key) − 获取存储在 key 处的键值对。如果找不到键,则会抛出 KeyError 异常。
keys() − 返回存储中所有键的列表。
put(key, **values) − 将新的键值对(在值中给出)放入存储中。任何现有的键值对都将被删除。
方法(get()、put()、exists()、delete()、find())具有异步版本。可以使用或不使用回调参数来调用这些方法。如果给定,回调会在可用时将结果返回给用户,因为请求将是异步的。如果回调为 None,则请求将是同步的,并且将直接返回结果。
示例
以下是示例 −
# synchronous res=store.get(key) print (res) # asynchronous def my_callback(store, key, result): print (result) store.get(key)
回调函数应具有以下参数 −
store − 当前使用的"Store"实例。
key − 所寻找的密钥。
result −查找键的结果。
示例
from kivy.storage.jsonstore import JsonStore from kivy.storage.dictstore import DictStore store = JsonStore('store.json') # 放入一些值 store.put('state', name='Maharashtra', capital='Mumbai', population='Eleven Cr') store.put('os', name='Windows', version=11, launched=2021) store.put('shape', type='circle', radius=5) # 使用相同的索引键会清除所有先前添加的 k-v 对 # 使用索引键和键获取值 print('Population of ', store.get('state')['name'], 'is ', store.get('state')['population']) print (store.get('state').keys()) for k,v in store.get('state').items(): print (k,":",v) # 或猜测密钥的一部分的密钥/条目 for item in store.find(type='circle'): print('Store:',item[0]) print('K-V pairs: ',str(item[1]))
输出
它将产生以下输出 −
Population of Maharashtra is Eleven Cr dict_keys(['name', 'capital', 'population']) name : Maharashtra capital : Mumbai population : Eleven Cr Store: shape K-V pairs: {'type': 'circle', 'radius': 5}