如何使用webpy将MySQL查询格式化为JSON?

时间:2011-05-31 04:18:39

标签: python mysql json web.py

我正在尝试使用webpy查询MySQL数据库。从SQL查询中,我得到以下内容。

<Storage {'title': u'Learn web.py', 'done': 0, 'id': 0L, 'mytime': datetime.datetime(2011, 5, 30, 10, 53, 9)}>

我尝试使用json.dumps(data)将数据序列化为JSON格式,但是我收到一条错误,指示数据不可序列化。

我可能会遍历每个键值对并将其放入另一个词典中,但这似乎太多了。

有关最佳方法的任何建议吗?

修改 我认为我的问题是因为我在数据中有datetime.datetime(2011, 5, 30, 10, 53, 9)。我从数据库中删除了mytime列,一切正常。有没有办法将mytime列包含在JSON字符串中?

2 个答案:

答案 0 :(得分:1)

您可以扩展json.JSONEncoder来处理日期:

我没有使用Storage对象作为参数对此进行测试,但正如您所说,当查询中没有日期时它会起作用,我认为这应该有效。 (有关扩展编码器对象的信息,请参阅json模块docs。)

import datetime, json

class ExtendedEncoder(json.JSONEncoder):

    def default(self, o):
        if isinstance(o, datetime.datetime):             
            # If it's a date, convert to a string
            # Replace this with whatever your preferred date format is
            return o.strftime("%Y-%m-%d %H:%M:%S")  

        # Defer to the superclass method
        return json.JSONEncoder(self, o)

然后,如果“result”是您的存储对象

json_string = json.dumps(result, cls=ExtendedEncoder)

答案 1 :(得分:0)

尝试将其转换为UNIX时间戳:

import time
result.mytime = time.mktime(result.mytime.utctimetuple())