redis.exceptions.DataError:类型输入无效:'dict'。首先转换为字节、字符串、整数或浮点数

问题描述 投票:0回答:1

目标:存储一个

dict()
{}
作为键值对的值,以
set()
Redis

代码

import redis

r = redis.Redis()

value = 180

my_dict = dict(bar=value)

r.set('foo', my_dict)
redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a bytes, string, int or float first.
python python-3.x serialization redis byte
1个回答
8
投票

你不能在

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

但是,我们可以使用

pickle
json
来获取对象的
Bytes

恕我直言,您已经导入的任何一个都是最佳的。


泡菜

序列化到泡菜(用

pickle.dumps
)pre-
set()

import pickle

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

dict_bytes = pickle.dumps(my_dict)

r.set('my_key', dict_bytes)

反序列化对象(dict)(用

pickle.loads
)post-
get()

dict_bytes = r.get('my_key')

my_dict = pickle.loads(dict_bytes)

JSON 字符串

序列化为 JSON 字符串(使用

json.dumps
)pre-
set()

import json

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

dict_str = json.dumps(my_dict)

r.set('my_key', dict_str)

反序列化对象(dict)(用

json.loads
)post-
get()

dict_str = r.get('my_key')

my_dict = json.loads(dict_str)
© www.soinside.com 2019 - 2024. All rights reserved.