Flask-SQLAlchemy资源序列化:将数据库的数据转化为JSON标准格式输出

三种序列化方法

在网络上找到的三种序列化方法如下:

  • 在模型定义的时候给序列化的方法
  • 继承改写 flask 里面的 JSONEncoder类以及default方法
  • 使用Marshmallow

为什么要进行序列化(将数据库取出的对象转化为JSON格式)

在Flask中,我们常常会选择采用RESTful设计风格,即在各个资源对应的GET、POST、PUT方法中,返回一个JSON格式的数据(资源)给前端使用。这就要求我们在(如get)方法中return一个dict,flask-restful会自动帮我们返回为一个JSON格式的数据。

而通过flask-SQLAlchemy这一ORM工具所构建的数据库表模型,通过其语句所取出的数据通常是object类型的,这一类型并不能直接在方法中return返回一个JSON格式,因此需要先对从数据库中取出的数据进行序列化,然后再return给前端。


第一种序列化方法:使用dict在模型内部构建一个规则方法,定义资源的模式

该方法是由我们自己手动实现资源的序列化
下面就是一个完整的Model模型的构建,以及序列化实现:

class Test(db.Model):
	# 表的字段构建
    id = db.Column(db.BIGINT, primary_key=True, autoincrement=True)
    station_id = db.Column(db.String(20), nullable=False)
    datetime = db.Column(db.DateTime, nullable=False)
    m0 = db.Column(db.Float)
    
    # 模型的资源序列化函数(方法)
    # 在该函数中所返回的dict的keys,将是我们从test表里所序列化的字段
    def test_schema(self):
        return {
   
            'id': self.id,
            'station_id': self.station_id,
            'datetime': self.datetime,
            'm0': self.m0
        }

上述代码便完成了准备工作,下面我们将展示如何应用,即在RESTful API中以JSON格式返回数据库表中取得的数据:

class HelloWorld(Resource):
    def get(self):
        data = Test.query.first()	# 取第一条数据
        data_serialize = data.test_schema()	# 通过我们之前在模型类里定义的序列化函数对取得数据进行序列化,此时 data_serialize 的类型是 dict
        return jsonify(data_serialize)

以上就是第一种序列化方法的实现过程
给出完整代码:

from flask import Flask as _Flask
from flask import jsonify
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
from flask_restful import Api, Resource
from flask_marshmallow import Marshmallow

app = _Flask(__name__)
api = Api
  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Flask 中使用 SQLAlchemy 连接已有的数据库,需要在 Flask 项目中进行如下配置: 1. 安装 SQLAlchemy: ``` pip install SQLAlchemy ``` 2. 在 Flask 项目中创建一个 config.py 文件,添加数据库连接信息: ```python SQLALCHEMY_DATABASE_URI = 'mysql://username:password@hostname/database' SQLALCHEMY_TRACK_MODIFICATIONS = False ``` 其中,`SQLALCHEMY_DATABASE_URI` 表示数据库连接信息,`SQLALCHEMY_TRACK_MODIFICATIONS` 表示是否追踪数据库修改,默认为 True,我们可以手动设置为 False。 3. 在 Flask 项目中创建一个 models.py 文件,定义数据模型: ```python from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20)) age = db.Column(db.Integer) ``` 4. 在 Flask 项目的 __init__.py 文件中初始化 db: ```python from flask import Flask from config import SQLALCHEMY_DATABASE_URI from models import db app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = SQLALCHEMY_DATABASE_URI app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db.init_app(app) ``` 5. 在 Flask 项目中创建一个 manage.py 文件,定义命令行操作: ```python from flask_script import Manager from models import db, User from app import app manager = Manager(app) @manager.command def create_all(): db.create_all() if __name__ == '__main__': manager.run() ``` 6. 在命令行中执行 `python manage.py create_all` 命令,创建数据库表。 以上就是在 Flask 中连接已有的数据库的步骤。需要注意的是,连接数据库的 URI 需要根据实际情况进行调整,例如,如果使用的是 MySQL 数据库,则需要将 URI 中的 `mysql` 替换为 `mysql+pymysql`。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值