return iter(x.items()) AttributeError: 'int' object has no attribute 'items' (python向redis数据库插入有序集合)

使用python向redis插入有序集合时出现了问题:

def add(proxy, score=10):
    if not db.zscore(REDIS_KEY, proxy):
        return db.zadd(REDIS_KEY, score, proxy)

在这里插入图片描述
不知道为什么网上的代码都是我上面写的那样,但是可能是由于版本原因,这个方法已经不能用了,不过它既然提示了哪里出的问题,我们索性去源码里看一下:
在这里插入图片描述
很明显,这个方法接受两个必须参数,name是有序集合的键名,mapping应该就是要插入的值和权重的字典形式了,而不是分开两个参数传入,再往下看:
在这里插入图片描述
这里执行iteritems方法传入mapping后将返回值的前两项添加到新列表里,然后执行插入语句,联想到redis的插入语句 zadd key score1 value1 score2 value2...,那么这里的返回列表中第一项应该是值, 第二项是权重(注意他这里顺序的调整),继续看一下iteritems方法:
在这里插入图片描述
果然如此!这里就是返回了传入字典的键值对元组,那么正确的插入代码应该是这样子的:

def add(proxy, score=10):
    if not db.zscore(REDIS_KEY, proxy):
        return db.zadd(REDIS_KEY, {
    
    proxy: score})

检查一下是否插入成功:
在这里插入图片描述
完美!

猜你喜欢

转载自blog.csdn.net/zzh2910/article/details/89603192