<p>您没有正确地使用游标对象。你知道吗</p>
<p>要执行查询,请调用<code>execute()</code>方法,然后在光标上迭代或调用各种方法,如<code>fetchone()</code>或<code>fetchmany()</code>。<code>cur.execute()</code>的返回值不是可以迭代的。你知道吗</p>
<p>要将代码更改为在光标上迭代,请在一行上调用<code>cur.execute(...)</code>,然后在下一行上迭代光标:</p>
<pre><code>def getLastData():
cur.execute("SELECT * FROM weather ORDER BY timestamp DESC LIMIT 1")
for row in cur:
time = str(row[1])
temp = row[2]
hum = row[3]
press = row[4]
return time, temp, hum, press
</code></pre>
<p>然而,虽然只要表中有一些天气数据,这看起来就可以工作,但是如果这个表是空的,它将以<code>NameError</code>失败,因为没有要迭代的行,因此变量<code>time</code>、<code>temp</code>、<code>hum</code>和<code>press</code>将是未定义的。你知道吗</p>
<p>最好调用<code>cur.fetchone()</code>,因为我们最多只需要一行。如果有数据要读取,则返回数据行;如果没有,则返回<code>None</code>。然后,我们可以根据需要处理错误情况:</p>
<pre><code>def getLastData():
cur.execute("SELECT * FROM weather ORDER BY timestamp DESC LIMIT 1")
row = cur.fetchone()
if row is None:
# TODO change this if necessary
raise ValueError("No weather data found")
else:
time = str(row[1])
temp = row[2]
hum = row[3]
press = row[4]
return time, temp, hum, press
</code></pre>