Kivy - 存储



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() 方法来存储键值对。对于 JsonStore:

from kivy.storage.jsonstore import JsonStore

store = JsonStore('hello.json')

# put some values
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)** - 将新的键值对(在 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')

# put some values
store.put('state', name='Maharashtra', capital='Mumbai',
population='Eleven Cr')
store.put('os', name='Windows', version=11, released=2021)
store.put('shape', type='circle', radius=5)

# using the same index key erases all previously added k-v pairs
# get a value using a index key and key
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)
   
# or guess the key/entry for a part of the key
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}
广告