轻松将sqlAlchemy中的对象转换为dict

在用sqlAlchemy写web应用的时候,常常会用json进行通讯,跟json最接近的对象就是dict,有时候操做dict也会比操做ORM对象更为方便,毕竟不用管数据库session的状态了。web

假设数据库里有一张post表,其中一种方法就是sql

p = session.query(Post).first()
p.__dict__

但因为p是sqlAlchemy的对象,因此p.__dict__中会有一些其余的属性好比_sa_instance这种咱们不须要关注的数据库

那么咱们能够给model的基类加一个方法,假设models.py中原来是这样json

Base = sqlalchemy.ext.declarative.declarative_base()

class Post(Base):
    __tablename__ = 'post'
    id = Column(Integer, primary_key=True)
    title = Column(String)

那么咱们能够加一个to_dict()方法到Base类中session

def to_dict(self):
    return {c.name: getattr(self, c.name, None) for c in self.__table__.columns}

Base.to_dict = to_dict

这样就能够post

p = session.query(Post).first()
p.to_dict()

固然,若是model没有和table绑定的话model里是没有__table__的信息的,可能也会出问题,不过我目前以为这样最方便了code

相关文章
相关标签/搜索