2012-09-07 116 views
1
cur.execute("SELECT \ 
       title, \ 
       body, \ 
       date \ # This pgsql type is date 
      FROM \ 
       table \ 
      WHERE id = '%s';", id) 

response = cur.fetchall() 

print response 

舉個例子這給了我: -psycopg2 execute返回日期時間,而不是字符串

[('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]) 
        }) 

這感覺像可憐的形式,有沒有人知道一個更好的方式來處理呢?

回答

8

首先,您希望從具有「日期」數據類型的字段返回什麼?明確地說,日期爲,驅動程序顯然在這裏按預期執行。

所以你的任務實際上是找出如何說json編碼器來編碼datetime.date類的實例。答案很簡單,通過繼承內置一個提高編碼器:

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) 
+0

真棒,完美的工作。謝謝。 –

相關問題