0

我使用 BaseHttpServer 设置了一个基本的 python 网络服务器,并且正在练习从 postgresql 数据库中查询数据。一切都很顺利,但是在解析 SQL 结果时出现错误。这是我的代码:

cur=con.cursor()
cur.execute(('select * from stop_times as a, stop_times as b where a.train_id=b.train_id and a.station_name = %s and b.station_name= %s and a.arrival_time < b.arrival_time'), (origin_name, dest_name))

self.wfile.write("Train Number &nbsp &nbsp  Starting Station &nbsp &nbsp  Destination Station &nbsp &nbsp Departure Time &nbsp &nbsp Arrival Time <br />")

while True:
    row=cur.fetchone()
    if row==None:
        break

    print row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8]

    for item in row[0]:
        self.wfile.write("%s"% item)
    self.wfile.write(" &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp")
    for item in row[3]:
        self.wfile.write("%s"% item)
    self.wfile.write(" &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp")

    for item in row[8]:                         
        self.wfile.write("%s"% item)
    self.wfile.write("&nbsp &nbsp &nbsp &nbsp")

    for item in row[2]:
        self.wfile.write("%s"% item)
    self.wfile.write("&nbsp &nbsp")

打印语句用于调试控制台,并提供正确的输出:

427 10:23:00 10:23:00 San Antonio 6 427 11:08:00 11:08:00 Millbrae
429 11:23:00 11:23:00 San Antonio 6 429 12:08:00 12:08:00 Millbrae
431 12:23:00 12:23:00 San Antonio 6 431 13:08:00 13:08:00 Millbrae

我只是想将某些列输出到网页,当我到达最后一个 for 循环 for row[2] 时,我收到此错误:

File "./caltrainServer.py", line 129, in performQuery
for item in row[2]:
TypeError: 'datetime.timedelta' object is not iterable

我检查了一下,我数据库中的那些列是间隔类型的。如何像处理其他类型为 varchar 的列一样遍历它们?

4

1 回答 1

2

您不必要地迭代行值的内容。像这样的行:

for item in row[0]:
    self.wfile.write("%s"% item)

可能会更改为

self.wlfile.write(row[0])

你在做什么,什么时候row[x]一个字符串实际上是迭代每个字母并写它。但是row[2]是一个 datetime.datetime 对象。而且由于 datetime.datetime 对象不可迭代,因此您会收到该错误消息。

试试类似的东西:

self.wlfile.write((row[2]))

这会将日期时间对象放在可以迭代的元组中。

于 2013-02-27T00:45:55.857 回答