zoukankan      html  css  js  c++  java
  • 【Python】极简单的方式序列化sqlalchemy结果集为JSON

    继承 json.JSONEncoder

    实现一个针对sqlalchemy返回类型的处理方式。

    sqlalchemy的返回类型有大都有两种,一种是Model对象,一种是Query集合(只查询部分字段)。

    针对这两种返回结果,都是来自同一中类型  sqlalchemy.orm.query.Query 

    所以针对Query做相应处理,让他返回一个dict

    class AlchemyJsonEncoder(json.JSONEncoder):
        def default(self, obj):
            # 判断是否是Query
            if isinstance(obj, Query):
                # 定义一个字典数组
                fields = []
                # 定义一个字典对象
                record = {}
                # 检索结果集的行记录
                for rec in obj.all():
                    # 检索记录中的成员
                    for field in [x for x in dir(rec) if
                                  # 过滤属性
                                  not x.startswith('_')
                                  # 过滤掉方法属性
                                  and hasattr(rec.__getattribute__(x), '__call__') == False
                                  # 过滤掉不需要的属性
                                  and x != 'metadata']:
                        data = rec.__getattribute__(field)
                        try:
                            record[field] = data
                        except TypeError:
                            record[field] = None
                    fields.append(record)
                # 返回字典数组
                return fields
            # 其他类型的数据按照默认的方式序列化成JSON
            return json.JSONEncoder.default(self, obj)

    这样在每次序列化的时候就可以简单的使用

    1
    json.dumps(result1, cls=AlchemyJsonEncoder)

    来实现对结果集的json序列化了。

  • 相关阅读:
    JavaOne Online Hands-on Labs
    Using DTrace to Profile and Debug A C++ Program
    怎样挑选电线?家装用线越大越好吗?
    ORACLE DTRACE DOC
    内核书
    SQL Server vNext CTP 1.2
    用VS Code打造最佳Markdown编辑器
    opendtrace 开源汇总
    DTrace C++ Mysteries Solved 转
    MYSQL-RJWEB 博客学习
  • 原文地址:https://www.cnblogs.com/yanglang/p/7126382.html
Copyright © 2011-2022 走看看