極簡單的方式序列化sqlalchemy結果集爲JSON

繼承 json.JSONEncoderpython

實現一個針對sqlalchemy返回類型的處理方式。sql

sqlalchemy的返回類型有大都有兩種,一種是Model對象,一種是Query集合(只查詢部分字段)。json

針對這兩種返回結果,都是來自同一中類型  sqlalchemy.orm.query.Query 數組

因此針對Query作相應處理,讓他返回一個dictapp

 

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)

  

這樣在每次序列化的時候就能夠簡單的使用code

json.dumps(result1, cls=AlchemyJsonEncoder)

來實現對結果集的json序列化了。orm

相關文章
相關標籤/搜索