Python SQLAlchemy查询结果使用json.dumps()转成JSON字符串方法

本文主要介绍Python中,使用SQLAlchemy查询出来结果,通过json.dumps()方法转换成JSON字符串方法,以及相关示例代码。

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)

推荐阅读
cjavapy编程之路首页