2013-02-27 24 views
0

Я установил базовый веб-сервер python с помощью BaseHttpServer и практикую запросы данных из базы данных postgresql. Все идет плавно, но у меня ошибка при анализе результатов SQL. Вот мой код:ТипError: объект 'datetime.timedelta' не является итерируемым-BaseHttpServer issue

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 

Я просто пытаюсь вывод некоторых столбцов в Интернет страницы, и, когда я получаю, что последний цикл для ряда [2] Я получаю эту ошибку:

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

я проверил, и эти столбцы в моей базе данных имеют интервал типа. Как я повторяю их, как и в других столбцах, которые были типа varchar?

+0

'row [2]' is 'datetime.timedelta', вы не можете получить «элемент» изнутри (поскольку он только имеет). Я не думаю, что вам нужно делать какие-либо итерации, вы могли бы просто «self.wfile.write» («{0}, {1} ... {9}». Format (строка [0], строка [1]. .. строка [9])) '? – GordonsBeard

+0

Вы намеревались для html-объекта ' ' (а не '& nbsp')? –

+0

А, да, я бы набрал   –

ответ

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])) 

Это помещает объект DATETIME в кортеже, который может повторяться.

Смежные вопросы