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])
})
感觉形状不好,有没有人知道更好的处理方式?
答案 0 :(得分:9)
首先,您希望从具有" date"的字段返回什么?数据类型?明确地,日期,驱动程序显然在这里按预期执行。
所以你的任务实际上是找出如何说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)
答案 1 :(得分:1)
如前面的答案所示,这是对日期字段的查询的预期结果。但是,可以在查询本身中简化更多。 如果您浏览postgres文档,则可以找到to_char()函数。 这将导致您的查询中的简单更改
cur.execute("SELECT \
title, \
body, \
to_char(date, 'YYY-MM-DD') \ # This pgsql type is date
FROM \
table \
WHERE id = '%s';", id)