我正在编写一个脚本,将一堆 csv 文件格式化为一个 csv 文件。
为此,我通过 sqlite 在 python 中使用了几个游标表。
这是我的代码——目前我只是试图获取 gsap 中与 gsap_locs 中的代码相关联的每一行以进行打印
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]
之后取出所有内容时,它会打印出第一个选择中的所有值。
为什么在不满足第一个for的条件的情况下跑完第二个for就从我的第一个for跑出来了?
最佳答案
您缺少 fetchall
或 fetchone
指令。
这是很常见的事情,我们认为 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()
关于Python foreach 没有正确循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44682238/