我想使用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
答案 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命令,以逗号分隔。
另请参见:
答案 3 :(得分:0)
认为您正在使用Redis库的较新版本。从文档here看来,方法签名已更改。认为这可行:
redisClient.zadd("players", rishu=1)