1

当我使用此脚本来获取数组 A 中的每个元素在数组中重复多少次时,BI 会得到正确的结果

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 数组返回的值的 SUM 和 AVG,因为我正在处理一些数据。

提前致谢!

4

1 回答 1

1

我对文档的阅读是fetchall()在第一个循环之后不会返回任何内容。对于调试,您应该检查它是否真的for在第二次(及以后)通过时进入了该内部循环。

要解决此问题,只需对您的代码进行少量修改,您有几个我能想到的选项:

  • 使用 a 循环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()

于 2013-03-06T03:15:02.637 回答