我正在尝试执行以下代码:
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
我总是弄乱数据库,最后解决这些问题, 我不知道他们为什么从一开始就弹出来。
获取msg字符串的代码,搜索它是否存在于数据库中,如果确实存在,则接收GPIO引脚并发送信号(请求位于数据库行的索引0
,而GPIO引脚位于索引{ {1}})。
答案 0 :(得分: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.."