簡単にsqlAlchemyのオブジェクトをdictに変換


sqlAlchemyでwebアプリケーションを書くときは、jsonで通信することがよくあります.jsonに最も近いオブジェクトはdictです.操作dictもORMオブジェクトを操作するより便利です.データベースsessionの状態は気にしません.
データベースに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__の情報がないので、問題になるかもしれませんが、今のところこれが一番便利だと思います.