2013-02-27 3 views
0

BaseHttpServer를 사용하여 기본 파이썬 웹 서버를 설정하고 postgresql 데이터베이스에서 쿼리 데이터를 연습합니다. 모든 것이 순조롭게 진행되고 있지만 SQL 결과를 파싱 할 때 오류가 발생합니다. 다음은 내 코드입니다 :TypeError : 'datetime.timedelta'객체가 반복 가능하지 않습니다. BaseHttpServer 문제

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]'은 (는) 'datetime.timedelta'입니다.이 항목 내에서 '항목'을 가져올 수 없습니다. 어떤 반복을 할 필요가 없다고 생각합니다. 그냥 self.wfile.write ("{0}, {1} ... {9}"형식 (행 [0], 행 [1]) 일 수 있습니다. .. row [9]))'? – GordonsBeard

+0

html 엔티티 ' '('& nbsp'이 아닌)을 사용 하시겠습니까? –

+0

아, 네, 입력 했어야합니다   –

답변

2

행 값의 내용을 불필요하게 반복하고 있습니다. 이 같은 라인 :

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

가능성이 row[x] 문자열이 실제로 각 문자 반복하고 쓰고있을 때,

뭐하는
self.wlfile.write(row[0]) 

로 변경 될 수 있습니다. 그러나 row[2]은 datetime.datetime 개체입니다. 그리고 datetime.datetime 객체는 반복 가능하지 않기 때문에 오류 메시지가 나타납니다. 반복 할 수있는 튜플의 날짜 오브젝트를 배치

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

:

대신 같은 것을보십시오.

관련 문제