2013-05-14 55 views
0

我想執行以下代碼範圍:SQLITE3列表索引的當試圖得到這樣的查詢

conn = sqlite3.connect("./Databases/Functions/He.db") 
cursor = conn.cursor() 

sql = "SELECT * FROM Requests WHERE Request like ?" 
cursor.execute(sql, [(msg)]) 
results = cursor.fetchall()[0] 
print results 

if((results)[1] == "True"): 
    GPIO = (results)[2] 
    Direction = (results)[3] 
    print "GPIO Setup ready.." 

,我發現了以下錯誤:

File "./Functions/doFunctions.py", line 29, in enRequests 
results = cursor.fetchall()[0] 
IndexError: list index out of range 

我總是搞亂數據庫,並最終修復這些問題, 我不知道他們爲什麼從一開始就彈出。

代碼獲取味精串,搜索它是否存在數據庫e,如果它接收到GPIO引腳和發送信號(請求位於索引0,而GPIO引腳位於索引2處)。

回答

1

您的查詢返回0個結果,因此沒有第一行提取。 .fetchall()在該情況下返回空列表,並且在索引0處沒有項目。

如果你只在查詢的第一個結果感興趣,你應該使用.fetchone()代替:

results = cursor.fetchone() 

.fetchone()要麼返回該行,或None如果沒有匹配的結果。

您在查詢中使用冗餘括號;這是不是你的問題的原因,但你可以安全地刪除它們:

cursor.execute(sql, [msg]) 

,或者使用一個元組:

cursor.execute(sql, (msg,)) 

你這樣做,在幾個地方,你可以切出了很多您的代碼中的(...)除了提高可讀性以外沒有任何效果。添加在測試中,如果有來自.fetchone()結果打電話給你的代碼可能是:

if results and results[1] == "True": 
    GPIO = results[2] 
    Direction = results[3] 
    print "GPIO Setup ready.." 
+0

但我進入了相同的字符串作爲數據庫中的,怎麼能說是該程序可以在數據庫中找到了嗎? – DarkFoxxy 2013-05-14 10:56:50

+0

@DarkFoxxy:沒有看到你的數據庫和'msg'的內容,這是不可能的。數據庫不認爲有匹配。 – 2013-05-14 10:57:47

相關問題