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设置Excel工作表网格线的隐藏与显示

    使用python设置Excel工作表网格线的隐藏与显示

    Excel表格界面的直观性很大程度上得益于表格中的网格线设计,这些线条帮助用户精确对齐数据,清晰划分单元格,本文将介绍如何使用Python设置隐藏或显示Excel工作表的网格线,实现自动话及批量处理,感兴趣的朋友可以参考下
    2024-06-06
  • 一文教你彻底解决Python包下载慢问题

    一文教你彻底解决Python包下载慢问题

    在利用python中,我们经常需要使用到各种各样的库。其中,pip是我们常用的安装工具,一般情况下我们基本上是直接pip方法安装第三方包,下面这篇文章主要给大家介绍了关于如何彻底解决Python包下载慢问题的相关资料,需要的朋友可以参考下
    2023-05-05
  • python tkinter控件布局项目实例

    python tkinter控件布局项目实例

    这篇文章主要介绍了python tkinter控件布局项目实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python脚本实现统计与可视化COCO数据集标注信息

    Python脚本实现统计与可视化COCO数据集标注信息

    COCO(Common Objects in Context)是目前计算机视觉领域最流行的数据集之一,下面我们就来看看如何使用Python脚本实现统计与可视化COCO数据集标注信息吧
    2026-03-03
  • python文件读取失败怎么处理

    python文件读取失败怎么处理

    在本篇文章里小编给大家分享的是关于python文件读取失败怎么处理的相关文章,需要的朋友们参考下。
    2020-06-06
  • python web.py开发httpserver解决跨域问题实例解析

    python web.py开发httpserver解决跨域问题实例解析

    这篇文章主要介绍了python web.py开发httpserver解决跨域问题实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Python实现图片转字符画的示例

    Python实现图片转字符画的示例

    本篇文章主要介绍了Python实现图片转字符画的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Requests什么的通通爬不了的Python超强反爬虫方案!

    Requests什么的通通爬不了的Python超强反爬虫方案!

    今天带大家学习Requests什么的通通爬不了的Python超强反爬虫方案,文中有非常详细的图文介绍及代码示例,对正在学习python的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • Python中优雅地处理JSON5文件的方法详解

    Python中优雅地处理JSON5文件的方法详解

    JSON5 是 JSON 的一个超集,通过引入部分 ECMAScript 5.1 的特性来扩展 JSON 的语法,以减少 JSON 格式的某些限制,同时,保持兼容现有的 JSON 格式,本文给大家介绍了Python中如何优雅地处理 JSON5 文件,需要的朋友可以参考下
    2024-04-04
  • Python打造自己的专属命令行工具

    Python打造自己的专属命令行工具

    本文主要介绍了Python打造自己的专属命令行工具,使得在类Unix系统和Windows系统中,可以通过直接输入自定义命令来运行脚本,具有一定的参考价值,感兴趣的可以了解一下
    2025-05-05

最新评论