【问题标题】:redis.exceptions.DataError: Invalid input of type: 'dict'. Convert to a bytes, string, int or float firstredis.exceptions.DataError:类型输入无效:\'dict\'。首先转换为字节、字符串、整数或浮点数
【发布时间】:2023-01-18 18:04:46
【问题描述】:

目标:将dict(){}作为键值对set()的值存储到雷迪斯.

代码

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】:

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

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

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


    泡菜

    连载前set()

    import pickle
    
    my_dict = {'a': 1, 'b': 2}
    
    dict_bytes = pickle.dumps(my_dict)
    
    r.set('my_key', dict_bytes)
    

    反序列化 post-get()

    dict_bytes = r.get('my_key')
    
    my_dict = pickle.loads(dict_bytes)
    

    JSON

    连载前set()

    import json
    
    my_dict = {'a': 1, 'b': 2}
    
    dict_str = json.dumps(my_dict)
    
    dict_bytes = bytes(dict_str, 'utf-8')
    
    r.set('my_key', dict_bytes)
    

    反序列化 post-get()

    dict_bytes = r.get('my_key')
    
    dict_str = dict_bytes.decode('utf-8')
    
    my_dict = json.loads(dict_str)
    

    【讨论】:

    • 我会在 48 小时内接受答复
    猜你喜欢
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多