Python foreach没有正确循环

时间:2017-06-21 17:06:57

标签: python csv for-loop sqlite

我正在编写一个脚本,将一堆csv文件格式化为一个csv文件。

为此,我通过sqlite在python中使用了几个游标表。

这是我的代码 - 目前我只想尝试获取与gsap_locs中的代码相关联的gsap中的每一行进行打印

data = c.execute("SELECT * from gsap_locs")
for row in data:
    print row[0]
    d2 = c.execute("select date, cardtype, volume, transactions from gsap where gsaploc=?", (row[0],))
    for r2 in d2:
        print r2

但是,我的代码只返回一行。我知道问题不在第一个for中,因为当我在print row[0]之后取出所有内容时,它会打印出第一个选择中的所有值。

为什么在没有满足第一个条件的情况下,在我的第二次跑步之后逃脱了我的第一次?

2 个答案:

答案 0 :(得分:2)

看起来cursor.execute只能跟踪一个操作/一次返回一个迭代器。您可能希望将第一个操作的结果保留在内存中,并在其上调用tuple

data = tuple(c.execute("SELECT * from gsap_locs")) 
for row in data:
   ...

确保有足够的内存来容纳第一个查询的所有结果。

答案 1 :(得分:2)

您遗漏了fetchallfetchone指示 这很常见,我们认为execute已经完成了获取数据的工作,但您应该使用fetch。 要在执行SELECT语句后检索数据,可以将游标视为迭代器,调用游标的fetchone()方法以检索单个匹配行,或调用fetchall()以获取匹配行的列表。

import sqlite3
conn = sqlite3.connect('gasp.sqlite')
c = conn.cursor()
c.execute("SELECT * FROM gsap_locs")
rows = c.fetchall()
for row in rows:
    print row[0]
    c.execute("select * from gsap where loc=?", (row[0],))
    d2 = c.fetchall()
    for r2 in d2:
        print r2
conn.close()