極めて簡単な方法でsqlalchemy結果セットをJSONにシーケンス化
1611 ワード
jsonを受け継ぐJSONEncoder
sqlalchemyに対する戻りタイプの処理方法を実現する.
sqlalchemyの戻りタイプには、ModelオブジェクトとQueryコレクション(一部のフィールドのみクエリー)の2種類があります.
この2つの戻り結果は、いずれも同じタイプのsqlalchemyから来ている.orm.query.Query
だからQueryに対して対応する処理をして、彼にdictを返させます
これにより、シーケンス化するたびに簡単に使用できます.
結果セットのjsonシーケンス化を実現しました.
sqlalchemyに対する戻りタイプの処理方法を実現する.
sqlalchemyの戻りタイプには、ModelオブジェクトとQueryコレクション(一部のフィールドのみクエリー)の2種類があります.
この2つの戻り結果は、いずれも同じタイプの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)
これにより、シーケンス化するたびに簡単に使用できます.
json.dumps(result1, cls=AlchemyJsonEncoder)
結果セットのjsonシーケンス化を実現しました.