当前位置:   article > 正文

sqlAlchemy中的对象转换为dict_sqlalachemy first()转dict

sqlalachemy first()转dict

sqlAlchemy中的对象转换为dict

 

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

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

但由于p是sqlAlchemy的对象,所以p.__dict__中会有一些其他的属性比如_sa_instance这种我们不需要关注的

那么我们可以给model的基类加一个方法,假设models.py中原来是这样

  1. Base = sqlalchemy.ext.declarative.declarative_base()
  2. class Post(Base):
  3. __tablename__ = 'post'
  4. id = Column(Integer, primary_key=True)
  5. title = Column(String)

那么我们可以加一个to_dict()方法到Base类中

  1. def to_dict(self):
  2. return {c.name: getattr(self, c.name, None) for c in self.__table__.columns}
  3. Base.to_dict = to_dict

这样就可以

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

当然,如果model没有和table绑定的话model里是没有__table__的信息的,可能也会出问题,不过我目前觉得这样最方便了

  •  
  • 新浪微博
  • 微信
  • Twitter
  • Facebook

赞  |   2收藏  |  2

 

你可能感兴趣的

3 条评论

默认排序时间排序

浮生若梦的编程 · 2016年11月11日

DateTime 之类的,可能还需要转换下

  1. def to_dict(self):
  2. def convert_datetime(value):
  3. if value:
  4. return value.strftime("%Y-%m-%d %H:%M:%S")
  5. else:
  6. return ""
  7. for col in self.__table__.columns:
  8. if isinstance(col.type, DateTime):
  9. value = convert_datetime(getattr(self, col.name))
  10. elif isinstance(col.type, Numeric):
  11. value = float(getattr(self, col.name))
  12. else:
  13. value = getattr(self, col.name)
  14. yield (col.name, value)

 赞 +1 回复

浮生若梦的编程 · 2016年11月11日

  1. def to_json(self):
  2. d = dict(self.__todict__())
  3. return json.dumps(d)

 赞 回复

Recoding · 2017年02月20日

还是推荐额外写方法来装换,不然每个model都有添加方法

  1. from json import dumps
  2. from sqlalchemy.orm import class_mapper
  3. def serialize(model):
  4. """Transforms a model into a dictionary which can be dumped to JSON."""
  5. # first we get the names of all the columns on your model
  6. columns = [c.key for c in class_mapper(model.__class__).columns]
  7. # then we return their values in a dict
  8. return dict((c, getattr(model, c)) for c in columns)
  9. # we can then use this for your particular example
  10. serialized_labels = [
  11. serialize(label)
  12. for label in session.query(LabelsData).filter(LabelsData.deleted == False)
  13. ]
  14. your_json = dumps(serialized_labels)

来自stackoverflow 具体链接不记得

 赞 回复

发布评论

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/613315
推荐阅读
相关标签
  

闽ICP备14008679号