使用Python将数组与MySQL数据库返回的值进行比较
我用这个脚本来计算数组 A 中每个元素在数组 B 中出现的次数,结果是正确的。
A = ['text1','text2','text3','text4']
B = ['text1','text2','text3','text4','text1','text2','text3','text4','text1','text2','text3','text4','text1','text2','text3','text4','text1','text2','text3','text4','text3','text4']
for c in A :
countVar = 0
for e in B :
if c == e :
countVar +=1
print c
print countVar
但是当数组 B 是从 SQL 查询返回的结果时,它只对第一个元素(在这个例子中是 text1)给出了正确的数量,而其他元素的计数却都是 0。
cursor = db.cursor()
cursor.execute("select * from Table")
A = ['text1','text2','text3','text4']
for element in A:
#print element
for row in cursor.fetchall() :
if row[0] == element :
#Count
countClient += 1
print row
print countClient
countClient = 0
结果是这样的:我知道我的表中有 text2 和 text3
text1
15
text2
0
text3
0
text4
0
有没有人知道这是为什么?或者有什么其他的方法可以做到这一点?我还在做其他计算,比如计算 SQL 数组返回值的总和和平均值,因为我在处理一些数据。
提前谢谢大家!
1 个回答
1
我理解的文档是,fetchall()
在第一次循环后不会再返回任何东西。为了调试,你应该检查一下在第二次(以及后面的)循环中,是否真的进入了那个内部的for
循环。
要解决这个问题,只需对你的代码做一些小修改,我想到几种方法:
- 用
fetchall
循环一次,把结果存到一个新数组里,然后在你当前的代码中使用这个新数组。 - 每次都调用
execute
。 - 重置游标指针。不太确定在Python中是否可以这样做,但我快速搜索了一下没有找到相关信息。
抱歉我不能提供更多具体的细节,因为Python不是我很熟悉的语言。
--
对于第一个选项,可以参考这样的(伪代码):
i = 0
C = []
for row in cursor.fetchall() :
c[i] = row[0]
i += 1
然后在你的内部循环中,使用for el in C
,而不是for row in cursor.fetchall()