sqlalchemy查詢結果轉為json並通過restapi接口返回的解決方案


先說背景:

python3.6, SqlAlchemy2.3.2

遇到的問題:

通過sqlalchemy查詢的結果,如果直接通過jsonify函數轉為json會報錯:

TypeError: Object of type 'Comment' is not JSON serializable
網上有各種方案,例如增加一個AlchemyEncoder類來專門處理,但是本人試過都不行,以下方案才是正解:

1. 需要在模型類中增加to_json函數:

 
class Comment(db.Model):
 
    __tablename__ = 't_comment'
 
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
 
    content = db.Column(db.Text, nullable=False)
 
    create_time = db.Column(db.DateTime, nullable=False, default=datetime.now)
 
    author_id = db.Column(db.Integer, db.ForeignKey('t_user.id'))
 
    question_id = db.Column(db.Integer, db.ForeignKey('t_question.id'))
 
 
 
    author = db.relationship('User', backref=db.backref('comments'))
 
    question = db.relationship('Question', backref=db.backref('comments',     order_by=create_time.desc()))
 
 
 
  def to_json(self):
 
      dict = self.__dict__
 
      if "_sa_instance_state" in dict:
 
          del dict["_sa_instance_state"]
 
      return dict    

  

2. 將查詢的結果,一次通過to_json方法放到數組中,在通過jsonify函數返回到前台:

 
# rest api接口,並將查詢結果轉化為json
 
@app.route('/comments', methods=['GET'])
 
def comments():
 
  comments = db.session.query(Comment).all()
 
  result = []
 
  for comment in comments:
 
    result.append(comment.to_json())
 
  return jsonify(result), 200

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM