【问题标题】:Redis-py hset() mapping - TypeError when setting multiple item valuesRedis-py hset() 映射 - 设置多个项目值时出现类型错误
【发布时间】:2021-02-17 04:17:40
【问题描述】:

我正在 Redis 中构建一些非常大的查找表。我有一些简单的代码可以按预期工作,当循环使用hset() 为每个项目在我的 Redis 哈希(通过管道)中设置单个值时:

foo = {"1234": "5678", "abcd": "efgh", ... }

with self.db.pipeline() as pipe:
    for foo in bar:
        pipe.hset("lookup_table", foo["key"], foo["value"])
pipe.execute()

这对于大字典来说很慢。为了加快速度,我希望能够将多个项目设置为管道中的映射,而不必遍历它。随着hmset() 现在被弃用,hset() 似乎可以通过关键字 arg 接受映射。我试图做以下事情:

with self.db.pipeline() as pipe:    
    pipe.hset("lookup_table", mapping=foo)
pipe.execute()

但这会产生错误TypeError: hset() got an unexpected keyword argument 'mapping'。我是否错误地使用了hset()?还是我误以为hset()可以这样接受多个项目?

我正在使用 py-redis 3.4.1 和 Python 3.7.5。

【问题讨论】:

    标签: python redis redis-py


    【解决方案1】:

    这似乎是一个已知问题,如此处所示 --> https://github.com/andymccurdy/redis-py/issues/1310#issuecomment-603081122

    正如您在链接的图片中看到的那样,PyPi 中的源代码具有 hset 和函数签名,包含关键字 mapping。您应该在安装py-redis 时验证是否存在相同的问题并遵循该票证。要解决此问题,您可以直接从 master 分支克隆以使用该功能。

    【讨论】:

    • 谢谢,我查看了 Github 上的源代码,发现它存在于 3.4.1 中,并且我通过 pip 安装了 3.4.1,所以认为这是我使用的代码。从 Github repo 安装解决了这个问题(而且确实更快)。
    【解决方案2】:

    更新

    pip install -U redis
    

    为我解决了这个问题。

    【讨论】:

    • 简单的修复永远是最好的修复!
    猜你喜欢
    • 1970-01-01
    • 2017-05-12
    • 2018-10-08
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2021-07-27
    相关资源
    最近更新 更多