如何将 Flask-SQLAlchemy 查询结果转换为 JSON 格式

2025-01-09 01:01:05   小编

在使用 Flask-SQLAlchemy 进行后端开发时,经常需要将数据库查询结果以 JSON 格式返回给前端。那么,如何高效地实现这一转换呢?

我们要了解 Flask-SQLAlchemy 的查询结果形式。它可能是单个模型对象,也可能是对象列表。以一个简单的用户表为例,定义如下模型:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(50))
    email = db.Column(db.String(100))

单个对象转换为 JSON

当查询结果为单个对象时,我们可以通过定义一个方法来将其转换为字典形式,再利用 Flask 内置的 jsonify 函数将字典转换为 JSON 格式。例如:

def user_to_dict(user):
    return {
        'id': user.id,
        'username': user.username,
        'email': user.email
    }

user = User.query.get(1)
if user:
    from flask import jsonify
    result = jsonify(user_to_dict(user))
    print(result)

多个对象转换为 JSON

如果查询结果是多个用户对象的列表,我们需要遍历列表,将每个对象都转换为字典,再把这些字典放入一个新的列表中,最后转换为 JSON。代码如下:

users = User.query.all()
user_list = []
for user in users:
    user_dict = {
        'id': user.id,
        'username': user.username,
        'email': user.email
    }
    user_list.append(user_dict)

result = jsonify(user_list)
print(result)

使用 Marshmallow 进行更复杂的转换

对于更复杂的数据库模型关系,比如用户有多个关联的订单,使用 Marshmallow 库会更加方便。Marshmallow 提供了序列化和反序列化的功能。

首先安装 Marshmallow:pip install marshmallow

然后定义一个 Schema:

from marshmallow import Schema, fields

class UserSchema(Schema):
    id = fields.Integer()
    username = fields.String()
    email = fields.String()

使用 Schema 进行转换:

users = User.query.all()
schema = UserSchema(many=True)
result = schema.dump(users)
print(result)

通过上述方法,无论是简单的单个对象还是复杂的对象关系,都能轻松地将 Flask-SQLAlchemy 的查询结果转换为 JSON 格式,满足前后端数据交互的需求。 掌握这些技巧,能有效提升开发效率,让后端数据传输更加顺畅。

TAGS: JSON格式 Flask开发 Flask-SQLAlchemy 查询结果转换

欢迎使用万千站长工具!

Welcome to www.zzTool.com