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基本数据结构中的列表、元组、集合、字典相关概念、使用方法及推导式、遍历等相关使用技巧,需要的朋友可以参考下2019-03-03python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
今天小编就为大家分享一篇python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-06-06
最新评论