6
cur.execute("SELECT \
                title, \
                body, \
                date \ # This pgsql type is date
             FROM \
                table \
             WHERE id = '%s';", id)

response = cur.fetchall()

print response

例として、これは私に与えます: -

[('sample title', 'sample body', datetime.date(2012, 8, 5))]

これはjson.dumpsなどに渡すことができないため、これを行う必要があります: -

processed = []

for row in response:
    processed.append({'title' : row[0], 
                      'body' : row[1], 
                      'date' : str(row[2])
                     })

悪い形のように感じますが、これを処理するより良い方法を知っている人はいますか?

4

3 に答える 3

12

まず、「日付」データ型のフィールドから何が返されると予想していましたか? 明示的に、dateと driver は明らかにここで期待どおりに動作します。

datetime.dateしたがって、あなたの仕事は、実際にはjsonエンコーダーでクラスのインスタンスをエンコードする方法を見つけることです。簡単な答えは、組み込みのエンコーダーをサブクラス化してエンコーダーを改善することです。

from datetime import date
import json

class DateEncoder(json.JSONEncoder):

    def default(self, obj):
        if isinstance(obj, date):
            return str(obj)
        return json.JSONEncoder.default(self, obj)

使用法 (カスタム エンコーダーを使用していることを明示する必要があります):

json.dumps(_your_dict, cls=DateEncoder)
于 2012-09-07T10:56:19.580 に答える