python - psycopg2 执行返回日期时间而不是字符串

标签 python psycopg2

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])
                     })

感觉形式不佳,有谁知道处理此问题的更好方法吗?

最佳答案

首先,您希望从具有“日期”数据类型的字段返回什么?明确地说,日期,并且驱动程序在此处显然按预期执行。

因此,您的任务实际上是了解如何使用 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)

关于python - psycopg2 执行返回日期时间而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12316638/

相关文章:

python - 如何将 numpy NaN 对象转换为 SQL 空值?

python - psycopg2 - 如何在更新 Json 列时转义单引号?

python - 如何使用命名的 paramstyle 占位符在带有 % 通配符的 python 变量上使用 SQL LIKE 运算符

python - 如何从 pandas 中的一系列数据帧中删除空数据帧?

python - 从文件列创建嵌套列表 (Python)

python - 使用 python 处理此文本文件的大多数 pythonic 方式

python - matplotlib 中特定于图形的属性与一般属性

python - 处理非常大的数字

python + psycopg2 = 未知类型?

python - 使用 psycopg2 执行 SQL 查询