web.py select 不返回任何结果,但该列表的长度会返回(也在 sql promt returns 结果中手动查询)

web.py select returning no results, but length of that list does (also manual query in sql promt returns results)

我正在处理我的第一个(更大的)python 应用程序,但我 运行 遇到了一些问题。我正在尝试使用 web.py 导入从 table 中获取 select 条目(我正在使用它,因为稍后我将使用 Web 前端)。

下面是我的(简化)代码:

db = web.database(dbn='mysql', host='xxx', port=3306, user='monitor', pw='xxx', db='monitor')
dict = dict(hostname=nodeName)
#nodes = db.select('Nodes', dict,where="hostName = $hostname")
nodes = db.query('SELECT * FROM Nodes') <-- I have tried both, but have comparable results (this returns more entries)
length = len(list(nodes))
print(length)
print(list(nodes))
print(list(nodes)[0])

下面是 python 的输出:

0.03 (1): SELECT * FROM Nodes
6 <-- Length is correct
[] <-- Why is this empty?
Traceback (most recent call last):
  File "monitor.py", line 30, in <module>
    print(list(nodes)[0]) <-- If it is empty I can't select first element
IndexError: list index out of range

下面是mySQL输出:

mysql> select * from monitor.Nodes;
+--------+-------------+
| nodeId | hostName    |
+--------+-------------+
|      1 | TestServer  |
|      2 | raspberryPi |
|      3 | TestServer  |
|      4 | TestServer  |
|      5 | TestServer  |
|      6 | TestServer  |
+--------+-------------+
6 rows in set (0.00 sec)

结论:table包含条目,并且select/query语句能够部分获取它们(它获取长度,但不是实际值?)

我尝试了多种方法,但目前我无法得到我想要的。我想 select 来自 table 的数据并在我的代码中使用它。

感谢您的帮助

感谢 reddit 的人们,我得以解决问题:https://www.reddit.com/r/learnpython/comments/53hdq1/webpy_select_returning_no_results_but_length_of/

底线是:查询方法的实现已经获取了数据,所以我第二次调用 list(nodes) 时数据已经消失,因此结果为空。

解决方案是将列表(节点)存储在一个变量中并从中工作。