当前位置:   article > 正文

sqlalchemy查询结果转为json并通过restapi接口返回的解决方案_sqlalchemy to json

sqlalchemy to json

还是先说背景:

python3.6, SqlAlchemy2.3.2

遇到的问题:

通过sqlalchemy查询的结果,如果直接通过jsonify函数转为json会报错:

TypeError: Object of type 'Comment' is not JSON serializable
网上有各种方案,例如增加一个AlchemyEncoder类来专门处理,但是本人试过都不行,以下方案才是正解:

1. 需要在模型类中增加to_json函数:

  1. class Comment(db.Model):
  2. __tablename__ = 't_comment'
  3. id = db.Column(db.Integer, primary_key=True, autoincrement=True)
  4. content = db.Column(db.Text, nullable=False)
  5. create_time = db.Column(db.DateTime, nullable=False, default=datetime.now)
  6. author_id = db.Column(db.Integer, db.ForeignKey('t_user.id'))
  7. question_id = db.Column(db.Integer, db.ForeignKey('t_question.id'))
  8. author = db.relationship('User', backref=db.backref('comments'))
  9. question = db.relationship('Question', backref=db.backref('comments', order_by=create_time.desc()))
  10. def to_json(self):
  11. dict = self.__dict__
  12. if "_sa_instance_state" in dict:
  13. del dict["_sa_instance_state"]
  14. return dict

2. 将查询的结果,一次通过to_json方法放到数组中,在通过jsonify函数返回到前台:

  1. # rest api接口,并将查询结果转化为json
  2. @app.route('/comments', methods=['GET'])
  3. def comments():
  4. comments = db.session.query(Comment).all()
  5. result = []
  6. for comment in comments:
  7. result.append(comment.to_json())
  8. return jsonify(result), 200

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

闽ICP备14008679号