zoukankan      html  css  js  c++  java
  • sqlalchemy结果转json

    网上搜了下,http://blog.csdn.net/liu_xing_hui/article/details/8956107
    介绍的很详细,自动一个Encoder给json的dump方法使用,能够实现queryresult转json

    import json
    from sqlalchemy.ext.declarative import DeclarativeMeta
    from datetime import datetime
    
    def new_alchemy_encoder():
        _visited_objs = []
    
        class AlchemyEncoder(json.JSONEncoder):
            def default(self, obj):
                if isinstance(obj.__class__, DeclarativeMeta):
                    # don't re-visit self
                    if obj in _visited_objs:
                        return None
                    _visited_objs.append(obj)
    
                    # an SQLAlchemy class
                    fields = {}
                    for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']:
                        data = obj.__getattribute__(field)
                        try:
                            if isinstance(data, datetime):
                                data = data.strftime('%Y-%m-%d %H:%M:%S')
                            json.dumps(data)  # this will fail on non-encodable values, like other classes
                            fields[field] = data
                        except TypeError:
                            fields[field] = None
                    return fields
    
                return json.JSONEncoder.default(self, obj)
        return AlchemyEncoder
    
    UnReadMsg = self.db.query(Message).filter(Message.uid == self.uid)
    msgs = []
    for msg in UnReadMsg:
        msgs.append(msg)
    UnReadMsg = json.dumps(msgs, cls=new_alchemy_encoder(), check_circular=False)
    

    但是新版的sqlalchemy中的queryresult对象加入了json属性,直接能得到json串,棒棒哒

    UnReadMsg = self.db.query(Message).filter(Message.uid == self.uid)
    msgs = []
    for msg in UnReadMsg:
        msgs.append(msg.json)
    print(msgs)
    return JsonResponse(self, 50000, data=msgs)   
    

    直接拿到结果爽的不要不要的,不过还是要知道这个dump方式是怎么实现的,这样以后也能处理更复杂的情况

    {
      "code": 50000,
      "data": [
        {
          "content": "你好啊",
          "entry_date": "2017-2-20 20:40",
          "msg_id": "2",
          "msg_readstatus": "1",
          "msg_sendstatus": "1",
          "msg_type": "1",
          "read_time": "",
          "send_time": "2017-2-20 20:40",
          "stamped": "0",
          "suid": "3",
          "uid": "1"
        },
        {
          "content": "好的很",
          "entry_date": "2017-2-20 20:41",
          "msg_id": "3",
          "msg_readstatus": "1",
          "msg_sendstatus": "1",
          "msg_type": "1",
          "read_time": "",
          "send_time": "2017-2-20 20:41",
          "stamped": "0",
          "suid": "2",
          "uid": "1"
        }
      ],
      "msg": null
    }
    
    
    
  • 相关阅读:
    USB
    Google
    机型参数
    mac
    反编译
    xcode
    Ios 消息推送
    真机:特殊
    Android
    object-c
  • 原文地址:https://www.cnblogs.com/wancy86/p/6421792.html
Copyright © 2011-2022 走看看