本文共 3443 字,大约阅读时间需要 11 分钟。
文章简介:本文介绍了如何将基于 Flask-SQLAlchemy 归档查询结果转换为 JSON 格式。通过手动映射、通用基类以及 Flask-Marshmallow 模块等多种方法详细说明实现过程。
在这篇文章中,我们将深入探讨如何将基于 Flask-SQLAlchemy 的查询结果转换为 JSON 格式。以下几种方法将为您提供实用的解决方案。
如果您不想使用第三方模块,手动编写代码也是可行的。以下是一个通用的实现方法。
class EntityBase(object): def to_json(self): fields = self.__dict__ if "_sa_instance_state" in fields: del fields["_sa_instance_state"] return fields
注意:请确保在 Model 类中继承 EntityBase 基类。
class User(db.Model, EntityBase): __tablename__ = 'user' USER_ID = db.Column(db.Integer, primary_key=True) USERNAME = db.Column(db.String(20), nullable=False) CREATED_BY = db.Column(db.String(20), nullable=False) CREATED_DATE = db.Column(db.Date, nullable=False)
@app.route('/users')def list_users():    users = User.query.all()    users_output = []    for user in users:        users_output.append(user.to_json())    return jsonify(users_output)@app.route('/users/           ')def find_user(userid):    user = User.query.get(userid)    return jsonify(user.to_json())          Flask-Marshmallow 提供了更方便的方法来实现数据序列化。
from flask_marshmallow import Marshmallowma = Marshmallow(app)
class UserSchema(ma.ModelSchema): class Meta: model = User
@app.route('/users')def list_users():    users = User.query.all()    user_schema = UserSchema(many=True)    user_data = user_schema.dump(users)    return jsonify(user_data)@app.route('/users/               ')def find_user(userid):    user = User.query.get(userid)    user_schema = UserSchema()    user_data = user_schema.dump(user)    return jsonify(user_data)              Flask-SQLAlchemy 提供了一个动态的方法来自动映射字段。如果您的字段名和数据库字段名一致,可以利用这一特性无需手动指定字段。
class User(db.Model):    __tablename__ = 'user'    USER_ID = db.Column(db.Integer, primary_key=True)    USERNAME = db.Column(db.String(20), nullable=False)@app.route('/users')def list_users():    users = User.query.all()    return jsonify([{"USER_ID": user.USER_ID, "USERNAME": user.USERNAME} for user in users])      __dict__ 对应的字段包含相关信息。from flask import Flask, jsonifyfrom flask_sqlalchemy import SQLAlchemyfrom flask_marshmallow import Marshmallowapp = Flask(__name__)app.config['SECRET_KEY'] = 'your-secret-key-here'app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falseapp.config['JSON_SORT_KEYS'] = Falsedb = SQLAlchemy(app)ma = Marshmallow(app)class User(db.Model):    __tablename__ = 'user'    USER_ID = db.Column(db.Integer, primary_key=True)    USERNAME = db.Column(db.String(20), nullable=False)    CREATED_BY = db.Column(db.String(20), nullable=False)    CREATED_DATE = db.Column(db.Date, nullable=False)class UserSchema(ma.ModelSchema):    class Meta:        model = User@app.route('/users')def list_users():    users = User.query.all()    user_schema = UserSchema(many=True)    user_data = user_schema.dump(users)    return jsonify(user_data)@app.route('/users/               ')def find_user(userid):    user = User.query.get(userid)    user_schema = UserSchema()    user_data = user_schema.dump(user)    return jsonify(user_data)if __name__ == "__main__":    app.run(debug=True)              以上方法均可实现将基于 Flask-SQLAlchemy 的查询结果转换为 JSON 格式的功能。您可以根据实际需求选择最适合的方法,并根据项目复杂度进行优化和扩展。
转载地址:http://sbthz.baihongyu.com/