摘要:查詢輸出Json 格式
程式碼:
import unittest from json import JSONEncoder from json import dumps from sqlalchemy import * from sqlalchemy.orm import create_session from sqlalchemy.ext.declarative import declarative_base from datetime import datetime from sqlalchemy.orm import contains_eager, joinedload from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import DeclarativeMeta from json import JSONEncoder class DateTimeEncoder(JSONEncoder): #JSON格式定義 def default(self, obj): if hasattr(obj, 'isoformat'): return obj.isoformat() elif isinstance(obj, decimal.Decimal): return float(obj) elif isinstance(obj, ModelState): return None else: return json.JSONEncoder.default(self, obj) my_declarative_base = lambda cls: declarative_base(cls=cls) @my_declarative_base class Base(object): #改寫Object 主要做Json輸出使用 @property def columns(self): return [ c.name for c in self.__table__.columns ] @property def columnitems(self): return dict([ (c, dumps(getattr(self, c),cls= DateTimeEncoder)) for c in self.columns ]) def __repr__(self): return u'{}({})'.format(self.__class__.__name__, self.columnitems) def to_json(self): return self.columnitems def rec_json(self, key_str): result = self.columnitems result[key_str] = getattr(self, key_str).columnitems return result engine = create_engine('mysql://root:@localhost:3306/test', echo=False) #建立資料庫連線 etadata = MetaData(bind=engine) class new_table(Base): #定義 Table __table__ = Table('new_table', etadata, autoload=True) session = create_session(bind=engine) #建立Session allres = session.query(new_table).all() #查詢資料表所有資料 #print allres.column_descriptions for s in allres: print s.to_json() #JSON字串輸出
結果:
{'SEX': '"T"', 'SN': '1', 'INSERT_TIME': '"2015-07-16T00:00:00"', 'NAME': '"Tom"'}
{'SEX': '"T"', 'SN': '2', 'INSERT_TIME': '"2015-07-15T00:00:00"', 'NAME': '"Jack"'}
{'SEX': '"T"', 'SN': '3', 'INSERT_TIME': '"2015-08-10T00:00:00"', 'NAME': '"Bill"'}