将数组与使用Python从mysql数据库返回的值进行比较

时间:2013-03-06 03:05:42

标签: 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查询返回时,确实拉出正确的数字,在这种情况下,第一个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,因为我正在进行一些数据处理。

提前致谢!

1 个答案:

答案 0 :(得分:1)

我对documentation的阅读是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()