1、使用实体类转换成JSON字符串
使用定义相应类型的实体类,将数据库中数据类对象换成实体类对象,之后在进行转换:
from dataclasses import dataclass from datetime import datetime from flask import Flask, jsonify from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) db = SQLAlchemy(app) @dataclass class User(db.Model): id: int email: str id = db.Column(db.Integer, primary_key=True, auto_increment=True) email = db.Column(db.String(200), unique=True) @app.route('/users/') def users(): users = User.query.all() return jsonify(users) if __name__ == "__main__": users = User(email="user1@gmail.com"), User(email="user2@gmail.com") db.create_all() db.session.add_all(users) db.session.commit() app.run()
2、使用自定义类转换成JSON字符串
使用json.dumps()方法时指定相应的解析处理类,自定义处理后在进行转换。
import json from sqlalchemy.ext.declarative import DeclarativeMeta # 解析处理类 class AlchemyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj.__class__, DeclarativeMeta): fields = {} for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']: data = obj.__getattribute__(field) try: json.dumps(data) fields[field] = data except TypeError: fields[field] = None return fields return json.JSONEncoder.default(self, obj) # 调用方法 json.dumps(alchemyData, cls=AlchemyEncoder)