Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python';sqlite3赢得';我无法获取所有结果_Python - Fatal编程技术网

Python';sqlite3赢得';我无法获取所有结果

Python';sqlite3赢得';我无法获取所有结果,python,Python,我的代码有问题,我有一个数据库(aoidata.sqlite),我想打印“comptype”(column)是列表中元素之一的所有行 数据库: 代码: import sqlite3 conn = sqlite3.connect('aoidata.sqlite') c = conn.cursor() listOfStatements = [] listID = [2, 3, 60] rangeID = len(listID) for i in range(rangeID): c.exe

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

数据库:

代码:

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
is 60,但在我的数据库中,我有8行。发生了什么?如何修复它?

如果
只获取第二行,那么
就完成了。您希望使用
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)

您错误地使用了
fetchone
(请参见@triplee answer),而
fetchall
则更简单:
listOfStatements=c.fetchall()
@tripleee,列表的元素只是示例,我可以有更多或更少的数据,请不要发布数据的屏幕截图。这很简单,可以只显示为文本。在编写
值时,您可能指的是
len(listID)
。@shmee谢谢,最近似乎太麻烦了!