[英]Python's sqlite3 won't fetch all results
我的代碼有問題,我有一個數據庫(aoidata.sqlite),我想打印所有行,其中“ comptype”(列)是列表中的元素之一。
數據庫:
碼:
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行。這是怎么回事? 我該如何解決?
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.