无法使用python在Redis中使用ZADD(sorted set)插入数据

时间:2018-11-30 07:24:10

标签: python search redis

我想使用python将数据插入redis的soretd集中进行复杂的查询,例如范围等。

import redis
redisClient = redis.StrictRedis(host='localhost', port=6379,db=0)

redisClient.zadd("players",1,"rishu")

但是当我运行上述代码时,我得到以下错误

AttributeError: 'str' object has no attribute 'items'

我在这里做错了什么。请使用此链接进行参考 https://pythontic.com/database/redis/sorted%20set%20-%20add%20and%20remove%20elements

4 个答案:

答案 0 :(得分:6)

@TheDude快要走了。

来自(redis-py 3.0)的较新版本的redis,方法签名已更改。 除了ZADD之外,MSET和MSETNX签名也进行了更改。

旧的签名是:

data = "hello world"
score = 1 
redis.zadd("redis_key_name", data, score) # not used in redis-py > 3.0

新签名为:

data = "hello world"
score = 1 

redis.zadd("redis_key_name", {data: score})

要一次添加多个:

data1 = "foo"
score1 = 10

data2 = "bar"
score2 = 20

redis.zadd("redis_key_name", {data1: score1, data2: score2})

可以预期使用dict,而不是args / kwargs,其关键是数据,而值是ZADD得分。 取回数据没有任何变化。

答案 1 :(得分:2)

rediscleint.execute_command('ZADD',“ rishu”,1,“ 123”)。这一工作原理...试图弄清楚如何在不使用execute_commnad方法的情况下将元素添加到排序集中。

答案 2 :(得分:1)

@divyanayan awasthi回答:

rediscleint.execute_command('ZADD', "rishu", 1, "123")

我们可以执行原始查询。

进一步的说明:

在redis-cli

>>> zadd rishu nx  1 "123"
# sorted set key = rishu 
# nx = new item 
# score = 1
# member = "123"

现在我们在python中的命令将是

rediscleint.execute_command('ZADD', "rishu",'nx' 1, "123")

在上面的代码中,我们在zadd命令中添加了新参数nx(添加新项)。 如果要更新排序的集合成员,则传递“ xx”而不是nx。

在execute_command中,我们可以运行相同的redis命令,以逗号分隔。

另请参见:

Redis sorted set commands

答案 3 :(得分:0)

认为您正在使用Redis库的较新版本。从文档here看来,方法签名已更改。认为这可行:

redisClient.zadd("players", rishu=1)