Как отформатировать запрос MySQL в JSON, используя webpy? - PullRequest
1 голос
/ 31 мая 2011

Я пытаюсь запросить базу данных MySQL, используя webpy.Из запроса 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 ]

1 голос
/ 06 июня 2011

Вы можете расширить 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)
0 голосов
/ 31 мая 2011

Попробуйте преобразовать его в метку времени UNIX:

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