0

我正在尝试执行以下代码:

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 引脚位于索引处2)。

4

1 回答 1

1

您的查询返回 0 个结果,因此没有要获取的第一行。.fetchall()在这种情况下返回一个空列表,并且 index 处没有项目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.."
于 2013-05-14T10:55:42.300 回答