当我使用此脚本获取阵列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查询返回时,确实拉出正确的数字,在这种情况下,第一个elemt是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
文本1
15个
文本2
0
文字3
0
文本4
0
任何人都知道为什么会这样吗?或建议另一种方法吗?我还在做其他计算,比如计算从SQL数组返回的值的SUM,以及AVG,因为我正在进行一些数据处理。
提前致谢!
答案 0 :(得分:1)
我对documentation的阅读是fetchall()
在第一次循环后不会返回任何内容。对于调试,您应该检查它是否在第二次(以及稍后)的传递中实际进入内部for
循环。
要通过对代码进行少量修改来解决此问题,您可以考虑以下几个选项:
fetchall
循环,将其存储在新数组中,并在当前代码中使用它。execute
。很抱歉,我不能提供更多细节,但Python并不是我熟悉的语言。
-
对于第一个选项,类似于(伪代码):
i = 0
C = []
for row in cursor.fetchall() :
c[i] = row[0]
i += 1
然后在内循环中,执行for el in C
而不是for row in cursor.fetchall()