0

BaseHttpServer を使用して基本的な python Web サーバーをセットアップし、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")

コンソールへのデバッグ用に print ステートメントがあり、正しい出力が得られます。

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

特定の列を Web ページに出力しようとしているところですが、行 [2] の最後の for ループに到達すると、次のエラーが発生します。

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 に答える