Kivy 简明教程

Kivy - Storage

Kivy 框架中的 Storage 类用于通过索引条目加载和存储任意数量的键值对。“kivy.storage”模块定义了 AbstractStore 类。它的实现 DictStore, JsonStoreRedisStore - 提供了具体类。

  1. kivy.storage.dictstore.DictStore:将 python dict 用作存储。

  2. kivy.storage.jsonstore.JsonStore:将 JSON 文件用作存储。

  3. kivy.storage.redisstore.RedisStore:使用带有 redis-py 的 Redis 数据库。

要使用任何上述存储类,请导入相关类,声明一个对象并调用其 put() 方法来存储 k-v 对。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 等具体实现重写−

  1. clear() − 清除整个存储。

  2. count() − 返回存储中的条目数。

  3. delete(key) − 从存储中删除一个键。如果未找到键,将引发 KeyError 异常。

  4. exists(key) − 检查键是否在存储中存在。

  5. find( filters) − 返回与过滤器匹配的所有条目。条目通过将 (key, entry) 对作为列表的生成器返回,其中 entry 为键值对的 dict。

  6. get(key) − 获取存储在键中的键值对。如果未找到键,将引发 KeyError 异常。

  7. keys() − 返回存储中所有键的列表。

  8. put(key, **values) − 将新的键值对 (在 values 中给出) 放入存储中。任何现有的键值对将被移除。

get()、put()、exists()、delete()、find() 方法具有异步版本。这些方法可以在有或没有回调参数的情况下调用。如果给定,回调在可用时将结果返回给用户,因为请求将是异步的。如果回调为 None,则请求将同步并且直接返回结果。

Example

示例如下:

# synchronous
res=store.get(key)
print (res)

# asynchronous
def my_callback(store, key, result):
   print (result)

store.get(key)

回调函数应具有以下参数−

  1. store − 当前使用的“Store”实例。

  2. key − 所寻求的键。

  3. result − 键查找的结果。

Example

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]))

Output

它将生成如下输出:

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}