Redis-py hset() 映射 - 设置多个项目值时出现 TypeError
Redis-py hset() mapping - TypeError when setting multiple item values
我正在 Redis 中构建一些非常大的查找表。我有一些简单的代码,当循环遍历 dict 以使用 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.
这似乎是一个已知问题,如此处所示 --> https://github.com/andymccurdy/redis-py/issues/1310#issuecomment-603081122。
正如您在链接的图片中看到的那样,PyPi 中的源代码 hset
的函数签名 不 包含关键字 mapping
.您应该在 py-redis
的安装中验证是否存在相同的问题并遵循该票证。要解决它,您可以直接从 master
分支克隆以使用该功能。
更新为
pip install -U redis
为我解决了这个问题。
我正在 Redis 中构建一些非常大的查找表。我有一些简单的代码,当循环遍历 dict 以使用 hset()
:
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.
这似乎是一个已知问题,如此处所示 --> https://github.com/andymccurdy/redis-py/issues/1310#issuecomment-603081122。
正如您在链接的图片中看到的那样,PyPi 中的源代码 hset
的函数签名 不 包含关键字 mapping
.您应该在 py-redis
的安装中验证是否存在相同的问题并遵循该票证。要解决它,您可以直接从 master
分支克隆以使用该功能。
更新为
pip install -U redis
为我解决了这个问题。