先說背景:
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