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数据库序列化操作的资料请关注脚本之家其它相关文章!

相关文章

  • Pytorch 多维数组运算过程的索引处理方式

    Pytorch 多维数组运算过程的索引处理方式

    今天小编就为大家分享一篇Pytorch 多维数组运算过程的索引处理方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • pandas调整列的顺序以及添加列的实现

    pandas调整列的顺序以及添加列的实现

    这篇文章主要介绍了pandas调整列的顺序以及添加列的实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 如何用Django处理gzip数据流

    如何用Django处理gzip数据流

    这篇文章主要介绍了如何用Django处理gzip数据流,帮助大家更好的理解和使用django框架,感兴趣的朋友可以了解下
    2021-01-01
  • PyCharm设置每行最大长度限制的方法

    PyCharm设置每行最大长度限制的方法

    今天小编就为大家分享一篇PyCharm设置每行最大长度限制的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • Python操作CSV格式文件的方法大全

    Python操作CSV格式文件的方法大全

    CSV 文件(Comma Separated Values file,即逗号分隔值文件)是一种纯文本文件,它使用特定的结构来排列表格数据,这篇文章主要给大家介绍了关于Python操作CSV格式文件的相关资料,需要的朋友可以参考下
    2021-07-07
  • python中常用的九种预处理方法分享

    python中常用的九种预处理方法分享

    这篇文章给大家分享了python中常用的九种预处理方法,对大家学习或使用python具有一定的参考价值,有需要的朋友们可以一起来看看。
    2016-09-09
  • pytorch查看网络参数显存占用量等操作

    pytorch查看网络参数显存占用量等操作

    这篇文章主要介绍了pytorch查看网络参数显存占用量等操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Python Socket编程之多线程聊天室

    Python Socket编程之多线程聊天室

    这篇文章主要为大家详细介绍了Python Socket编程之多线程聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 一个检测OpenSSL心脏出血漏洞的Python脚本分享

    一个检测OpenSSL心脏出血漏洞的Python脚本分享

    这篇文章主要介绍了一个检测OpenSSL心脏出血漏洞的Python脚本,心脏出血漏洞是互联网上的地震,看到的同学赶紧升级OpenSSL,避免黑客入侵
    2014-04-04
  • Python和java 如何相互调用

    Python和java 如何相互调用

    这篇文章主要介绍了Python和java 如何相互调用,下面文章见到那的对Python和java 相互调用的方法做了个小总结,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你有所帮助
    2021-12-12

最新评论