redis.exceptions.DataError:类型的输入无效:“dict”。首先转换为字节、字符串、int 或 float

Dan*_*l99 6 python serialization byte redis python-3.x

目标:将dict()or{}作为键值对的值存储到Redisset()上。

代码

import redis

r = redis.Redis()

value = 180

my_dict = dict(bar=value)

r.set('foo', my_dict)
Run Code Online (Sandbox Code Playgroud)
redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a bytes, string, int or float first.
Run Code Online (Sandbox Code Playgroud)

Dan*_*l99 13

您不能将字典对象作为操作中的值传递set()给 Redis。

但是,我们可以使用pickleorjson来获取Bytes对象的 。

恕我直言,无论您已经导入哪个都是最佳的。


泡菜

序列化为 pickle (with pickle.dumps) pre-set()

import pickle

my_dict = {'a': 1, 'b': 2}

dict_bytes = pickle.dumps(my_dict)

r.set('my_key', dict_bytes)
Run Code Online (Sandbox Code Playgroud)

反序列化对象 (dict) (with pickle.loads) post- get():

dict_bytes = r.get('my_key')

my_dict = pickle.loads(dict_bytes)
Run Code Online (Sandbox Code Playgroud)

JSON 字符串

序列化为 JSON 字符串(带有json.dumps)预set()

import json

my_dict = {'a': 1, 'b': 2}

dict_str = json.dumps(my_dict)

r.set('my_key', dict_str)
Run Code Online (Sandbox Code Playgroud)

反序列化对象 (dict) (with json.loads) post- get():

dict_str = r.get('my_key')

my_dict = json.loads(dict_str)
Run Code Online (Sandbox Code Playgroud)