python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > flask数据库序列化操作

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

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

您可能感兴趣的文章:
阅读全文