Python的sqlite3不会获取所有结果

时间:2019-02-25 06:25:52

标签: python

我的代码有问题,我有一个数据库(aoidata.sqlite),我想打印所有行,其中“ comptype”(列)是列表中的元素之一。

数据库:

enter image description here

代码:

import sqlite3

conn = sqlite3.connect('aoidata.sqlite')
c = conn.cursor()
listOfStatements = []
listID = [2, 3, 60]
rangeID = len(listID)
for i in range(rangeID):
    c.execute("SELECT * FROM boardcomponents WHERE comptype=?", (listID[i],))
    x = c.fetchone()
    listOfStatements.append(x)
    if x is not None:
        x = c.fetchone()
        listOfStatements.append(x)     
    else:    
        continue

conn.commit()
conn.close()`

输出:

(1, 'J4', 35.0, 180.0, 83.9999, 252.0, 0, 10.0, 10.0, 10.0, 4, 2)
(2, 'J3', 463.0, 351.0, 83.9999, 252.0, 2, 10.0, 10.0, 10.0, 4, 2)
(3, 'J6', 269.0, 480.0, 188.0, 141.0, 2, 10.0, 10.0, 10.0, 4, 3)
(195, 'T2_1', 1731.42, 711.765, 60.6912, 60.6912, 0, 50.0, 50.0, 10.0, 4, 60)
(196, 'T2_2', 2584.31, 700.237, 59.1059, 59.1059, 0, 50.0, 50.0, 10.0, 4, 60)

在我的输出中,我只得到comptype是60的两行,但是在我的数据库中却有8行。这是怎么回事?我该如何解决?

1 个答案:

答案 0 :(得分:1)

if仅获取第二行,然后完成。您想使用while循环来获取所有行。

    c.execute("SELECT * FROM boardcomponents WHERE comptype=?", (listID[i],))
    x = c.fetchone()
    while x:
        listOfStatements.append(x)
        x = c.fetchone()

正如@SergeBallesta指出的那样,您不必这样做;只需使用c.fetchall()即可获取所有结果。

还要注意,通过一次查询所有值可以使SQL效率更高。

SELECT * FROM boardcomponents WHERE comptype in (2, 3, 60);

您可以使用类似的内容构建该查询

    values = ', '.join(['?'] * len(listID))
    c.execute("SELECT * FROM boardcomponents WHERE comptype in ({0})".format(values), listID)