簡単にsqlAlchemyのオブジェクトをdictに変換
997 ワード
sqlAlchemyでwebアプリケーションを書くときは、jsonで通信することがよくあります.jsonに最も近いオブジェクトはdictです.操作dictもORMオブジェクトを操作するより便利です.データベースsessionの状態は気にしません.
データベースにpostテーブルがあると仮定します.その1つの方法は
しかし、pはsqlAlchemyのオブジェクトであるため、
では、モデルのベースクラスに方法を追加することができます.
これでいい
もちろん、モデルがtableにバインドされていなければ、モデルには
データベースにpostテーブルがあると仮定します.その1つの方法は
p = session.query(Post).first()
p.__dict__
しかし、pはsqlAlchemyのオブジェクトであるため、
p.__dict__
には_sa_instance
のような他の属性があります.では、モデルのベースクラスに方法を追加することができます.
models.py
では、もともとそうだったと仮定します.Base = sqlalchemy.ext.declarative.declarative_base()
class Post(Base):
__tablename__ = 'post'
id = Column(Integer, primary_key=True)
title = Column(String)
to_dict()
の方法をBase
のクラスに追加することができますdef to_dict(self):
return {c.name: getattr(self, c.name, None) for c in self.__table__.columns}
Base.to_dict = to_dict
これでいい
p = session.query(Post).first()
p.to_dict()
もちろん、モデルがtableにバインドされていなければ、モデルには
__table__
の情報がないので、問題になるかもしれませんが、今のところこれが一番便利だと思います.