flask数据库序列化操作实例探究

 更新时间:2024年01月23日 10:20:02   作者:weibin python学习与大数据分析  
这篇文章主要为大家介绍了flask数据库序列化操作实例探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

什么是序列化?

在ORM(对象关系映射)中,序列化是一个将数据库中的数据模型对象转化为适合在网络传输或存储(如JSON、XML等格式)的过程。简单来说,就是将数据库表的一行记录转换为易于传输和理解的数据结构。

序列化的作用就在于此:它能够将一个或多个数据库模型对象转换成JSON字符串或其他可传输格式。这个过程中,ORM框架提供的序列化功能会遍历模型对象的所有属性,并按照指定的规则(如日期时间格式、字段筛选等)进行转换。

Marshmallow是Python中广泛使用的序列化与验证库,而SQLAlchemyAutoSchema则是Marshmallow的一个扩展,专门用于处理SQLAlchemy定义的模型。当我们的数据模型通过SQLAlchemy定义后,就可以借助SQLAlchemyAutoSchema将其映射为可序列化的schema。

好了,话不多说,直接上代码:

安装序列化库

首先我们需要安装序列化库

pip install marshmallow_sqlalchemy,marshmallow

定义一个数据库模型

我们需要先定义一个数据库模型(大家可以把看成是一张数据库表结构)

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# 定义一个数据库表结构的数据模型
class AssetModel(db.Model):
    __tablename__ = 'asset'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    init_date = db.Column(db.String(30), nullable=False)
    username = db.Column(db.String(20), nullable=False)
    account = db.Column(db.String(20), nullable=False)
    update_time = db.Column(db.DateTime, nullable=False)
    def __init__(self, username, init_date,account, update_time):
        self.username = username
        self.init_date = init_date
        self.account = account
        self.update_time = str(update_time)
3、接着我们开始定义一个序列化器
from models.assetmodel import AssetModel
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema
from marshmallow import EXCLUDE,validate,fields
class AssetSerializer(SQLAlchemyAutoSchema):
    class Meta:
        model = AssetModel   # 配置对应的模型
        ordered = True       # 设置是否排序
        include_fk = True    # 是否包含外键
        unknown = EXCLUDE    # 未知字段序列化选项
        # exclude = ("name",)  # 序列化不需要的字段,反之对应的是include

定义一个序列化器

from models.assetmodel import AssetModel
from marshmallow_sqlalchemy import SQLAlchemyAutoSchema
from marshmallow import EXCLUDE,validate,fields
class AssetSerializer(SQLAlchemyAutoSchema):
    class Meta:
        model = AssetModel   # 配置对应的模型
        ordered = True       # 设置是否排序
        include_fk = True    # 是否包含外键
        unknown = EXCLUDE    # 未知字段序列化选项
        # exclude = ("name",)  # 序列化不需要的字段,反之对应的是include

序列化器的使用

from models.assetmodel import AssetModel,AssetSerializer
testdata_blueprint = Blueprint('testdata', __name__, url_prefix='/TestData')
@testdata_blueprint.route('/testdata', methods=['GET'])
def get_testdata_list():
    # 获取当前查询页码,默认为:1
    page = request.args.get('page',1,type=int)
    # 获取每页显示记录数,默认是20
    limit = request.args.get('limit',20,type=int)
    # 获取查询的资产账号
    account = request.args.get('account',type=int)
    # 计算当前页,开始的记录编号
    start = (page - 1) * limit
    # 计算当前页,结束的记录编号;
    end = start + limit
    # 分页查询
    items = AssetModel.query.slice(start, end)
    # 获取记录总数
    total = AssetModel.query.count()
    # 将查询结果进行序列化
    items = AssetSerializer().dump(items,many=True)  # 记得带上many=True参数,否则查询结果为空
    # 将结果转成json结构进行返回
    return jsonify({
        'code': 20000,
        'msg': 'success',
        'data': {
            'items': items,
            'total':total
        }
    })

通过上面的内容,不知道大家有没有留意到,我们根据查询条件查询数据库表然后将数据记录返回,这个过程我们并没有写查询的sql语句,如select * from table_name where account='abc';这就是ORM框架中的序列化的作用,可以帮我们方便快捷地获取到想要查询的数据,并且不需要我们手动将sql查询结果整理成列表等数据结构,这大大提高了我们的开发效率。

以上就是flask数据库序列化操作实例探究的详细内容,更多关于flask数据库序列化操作的资料请关注脚本之家其它相关文章!

相关文章

  • Python字符串特性及常用字符串方法的简单笔记

    Python字符串特性及常用字符串方法的简单笔记

    这篇文章主要介绍了Python字符串特性及常见字符串方法的简单笔记,为一些Pyhton入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01
  • PYTHON绘制雷达图代码实例

    PYTHON绘制雷达图代码实例

    这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • python防止程序超时的实现示例

    python防止程序超时的实现示例

    因为某个需求,需要在程序运行的时候防止超时,本文主要介绍了python防止程序超时的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Python Pandas中rolling方法的使用指南

    Python Pandas中rolling方法的使用指南

    在数据分析和时间序列数据处理中,经常需要执行滚动计算或滑动窗口操作,Pandas库提供了rolling方法,用于执行这些操作,下面我们就来学习一下rolling方法的具体使用吧
    2023-11-11
  • Python高级特性切片(Slice)操作详解

    Python高级特性切片(Slice)操作详解

    在Python中对于具有序列结构的数据来说都可以使用切片操作,需注意的是序列对象某个索引位置返回的是一个元素,而切片操作返回是和被切片对象相同类型对象的副本。
    2018-09-09
  • Qt5 实现主窗口状态栏显示时间

    Qt5 实现主窗口状态栏显示时间

    这篇文章主要介绍了Qt5 实现主窗口状态栏显示时间,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Django中auth模块用户认证的使用

    Django中auth模块用户认证的使用

    本文主要介绍了Django中auth模块用户认证的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Ranorex通过Python将报告发送到邮箱的方法

    Ranorex通过Python将报告发送到邮箱的方法

    这篇文章主要介绍了Ranorex通过Python将报告发送到邮箱的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Python函数之iterrows(),iteritems(),itertuples()的区别说明

    Python函数之iterrows(),iteritems(),itertuples()的区别说明

    这篇文章主要介绍了Python函数之iterrows(),iteritems(),itertuples()的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 最实用的20个python小技巧

    最实用的20个python小技巧

    大家好,本篇文章主要讲的是最实用的20个python小技巧,感兴趣的同学快来看一看吧,希望对你有帮助
    2021-11-11

最新评论