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

发布于 2024-11-10 17:24:39 字数 523 浏览 3 评论 0原文

我正在尝试使用 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 字符串中?

I am trying to query a MySQL database using webpy. From the SQL query, I get the following.

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

I tried to serialize the data using json.dumps(data) into JSON format, however I get an error indicating that the data is not serializable.

I could probably iterate through each key value pair and put it into another dictionary however that seems like too much work.

Any suggestions on best approaches?

Edit:
I think my problem is because I have datetime.datetime(2011, 5, 30, 10, 53, 9) in the data. I removed the mytime column from the database and everything worked. Is there a way to include the mytime column into the JSON string?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

檐上三寸雪 2024-11-17 17:24:39

您可以扩展 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)

那么,如果“结果”是你的存储对象

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

You can extend json.JSONEncoder to handle dates:

I've not tested this using the Storage object as an argument, but as you say it works when there's no date in the query, I think this should work. (See the json module docs for information about extending the encoder object).

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)

Then, if "result" is your storage object

json_string = json.dumps(result, cls=ExtendedEncoder)
后来的我们 2024-11-17 17:24:39

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

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

Try converting it into a UNIX timestamp:

import time
result.mytime = time.mktime(result.mytime.utctimetuple())
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文