sqlalchemy查询结果生成json的正确程序

# -*- coding: utf-8 -*-
from sqlalchemy.orm.query import Query
import json

class AlchemyEncoder(json.JSONEncoder):
    def default(self, obj):
        if not isinstance(obj, Query):
            return json.JSONEncoder.default(self, obj)

        result = obj.all()
        column_descriptions = q.column_descriptions
        
        data = list()  # 将要返回的列表
        fields = list()  # 获取到的列名在这里
        
        # 获取所有列名
        for col in column_descriptions:
            fields.append(col['name'])

        row = dict()
        for r in result:
            for f in fields:                
                row[f] = getattr(r, f, '')

            data.append(row)
        return data

# 使用方法   
if __name__ == '__main__':
    from sqlalchemy import MetaData, Table
    from sqlalchemy import create_engine
    from sqlalchemy.orm import scoped_session, sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    engine = create_engine('postgresql://这里我不发了,你懂的', echo=False)
    db = scoped_session(sessionmaker(autocommit=False,
                                     autoflush=True,
                                     bind=engine))
    metadata = MetaData()
    metadata.bind = engine
    Base = declarative_base(metadata=metadata)
    Base.query = db.query_property()
    
    
    class UnitModel(Base):
        __table__ = Table('unit', metadata, autoload=True)
    
    
    class MerchantModel(Base):
        __table__ = Table('merchant', metadata, autoload=True) 
        
            
    q = db.query(UnitModel.unit_name, MerchantModel.merchant_name).outerjoin(MerchantModel, UnitModel.unit_no == MerchantModel.unit_no)
    print json.dumps(q, cls=AlchemyEncoder)


你可能感兴趣的:(json,sqlalchemy)