使用非标准类型将查询结果序列化为JSON

时间:2017-02-21 20:28:49

标签: python json web-services sqlalchemy

所以我正在学习如何建立一个烧瓶网络服务,我开始使用这样的代码。

#...
class Objects(Resource) :
    def get(self) :
        conn = engine.connect()
        query = conn.execute("SELECT * FROM objects")
        return {'objects' : [dict(zip(tuple(query.keys()), i)) for i in query.cursor]}

api.add_resource(objects, '/objects')`
#...

这是好的,直到我遇到一个表,数据库中的字段表示为十进制,不能用上面的例子序列化。

所以我摸索着想出了以下内容。

class object(Resource) :
    def get(self):
        conn = engine.connect()
        query = conn.execute("SELECT * FROM objects")
        objects = []
        for row in query:
            object = {}
            for key in query.keys() :
                if(type(row[key]) is decimal.Decimal) :
                    object[key] = float(row[key])
                else :
                    object[key] = row[key]
            objects.append(object)       

        return {'objects': objects}

该代码工作正常,但我的直觉告诉我必须有更好的方法来编写它。不熟悉python但是我不确定如何继续......

如何利用pythons功能和类库以更加pythonic的方式处理上述情况?

1 个答案:

答案 0 :(得分:0)

https://jsonpickle.github.io/是一个不错的库,用于将Python对象序列化为JSON字符串。

import jsonpickle
json_str = jsonpickle.encode(obj)

稍后还有一种解码方法。

如果你曾经序列化SQLAlchemy模型实例(与SQL结果集相比),请确保你要分离或使它们成为瞬态,以避免出现问题。