web.py选择返回没有结果,但该列表的长度确实(sql promt中的手动查询返回结果)

时间:2016-09-19 08:24:22

标签: python mysql database select web.py

我正在研究我的第一个(更大的)python应用程序,但我遇到了一些问题。我正在尝试使用web.py导入从表中选择条目(我正在使用它,因为我将在以后使用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语句能够部分获取它们(它获取长度,但不是实际值?)

我尝试过多种方法,但目前我无法得到我想要的东西。我想从我的表中选择数据并在我的代码中使用它。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

感谢reddit上的人们,我能够解决这个问题:enter image description here

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

解决方案是将列表(节点)存储在变量中并从中进行操作。