我有sqlite,我从表中查询两列:
result_set = conn.execute("SELECT time, MeanCurrent from MEASUREMENTS")
然后,我想把每一栏放到一个单独的列表中,我到目前为止所做的是:
list1 = [record[0] for record in result_set]
list2 = [record[1] for record in result_set]
问题是,当list1完美地打印第一列时,list2显示为空,而如果我删除第一行,list2也会完美地打印第二列!
所以,在执行第一行之后,我的查询中发生了一些变化,但我不知道是什么。
有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
conn.execute()
返回一个游标对象。你不能多次迭代一个游标;当你到达终点时,它会在第二次迭代时再次从头开始。首先将所有行加载到列表中,或者使用仅需要迭代一次的其他技术。
我使用zip()
function配对列:
list1, list2 = zip(*result_set)
但您可以先使用results = list(result_set)
或results = result_set.fetchall()
将所有行显示为列表,也可以使用使用list1.append()
和list2.append()
的单个循环添加列值到两个列表。