Flask SQLAlchemy_Serializer ORM模型序列化

这篇具有很好参考价值的文章主要介绍了Flask SQLAlchemy_Serializer ORM模型序列化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在前后端分离项目中,经常需要把ORM模型转化为字典,再将字典转化为JSON格式的字符串。在遇到sqlalchemy_serializer之前,我都是通过类似Java中的反射原理,获取当前ORM模型的所有字段,然后写一个to_dict方法来将字段以及他的值封装成字典。大概的代码如下所示:

def to_dict(self):
  return {c.name: str(getattr(self, c.name)) for c in self.__table__.columns}

这种做法虽然一定程度上方便了开发,但也是带着枷锁跳舞,存在以下几个弊端:

  1. 无法优雅的排除不需要序列化的字段。

  2. 无法优雅的序列化多表之间的关系。

直到后来我遇到了sqlalchemy_serializer,泪流满面,这不就是我苦苦寻找的ORM模型序列化库吗?使用他序列化ORM模型,让我带你看看有多爽!

一、安装:

sqlalchemy-serializer已经上架PyPi,因此通过pip命令即可安装:

 pip install SQLAlchemy-serializer

二、基本使用:

如果想要让某个ORM模型能被序列化,那么只需要在定义模型的时候,让他继承自sqlalchemy_serializer.SerializerMixin即可,示例代码如下:

from sqlalchemy_serializer import SerializerMixin

class UserModel(db.Model, SerizlizerMixin):
    __tablename__ = "user"
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    email = db.Column(db.String(50), unique=True, nullable=False)
    username = db.Column(db.String(50), nullable=False)
    password = db.Column(db.String(200), nullable=False)

SerizlizerMixin会给ORM模型添加一个to_dict方法,此时你可以通过一行代码将ORM模型序列化成字典:

user = UserModel.query.filter(...).one()
user_dict = user.to_dict()

上述代码中将把UsrModel中所有字段都序列化成字典。

三、排除字段:

模型中有的字段不需要被序列化,比如用户的密码,那么这时候可以通过设置rules参数,或者only参数来指定序列化规则。比如排除password,那么可以通过如下代码方式实现:

user = UserModel.query.filter(...).one()
user_dict = user.to_dict(rules=('-password',))

上述代码中在调用to_dict方法的时候,传递了rules参数,并且设置了-password,其中的-号代表排除的意思,意思是不要序列化password。如果在绝大部分场景下都不需要某些字段,可以把这个规则写在模型定义中,这样所有序列化的时候,都会遵循这个序列化规则。比如:

class UserModel(db.Model, SerizlizerMixin):
    serialize_rules = ("-password", )
    __tablename__ = "user"
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    email = db.Column(db.String(50), unique=True, nullable=False)
    username = db.Column(db.String(50), nullable=False)
    password = db.Column(db.String(200), nullable=False)

如果需要排除的字段太多了,我们可以通过设置serialize_only属性来标记仅仅序列化某些字段。比如:

class UserModel(db.Model, SerizlizerMixin):
    serialize_only = ("id", "username")
    __tablename__ = "user"
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    email = db.Column(db.String(50), unique=True, nullable=False)
    username = db.Column(db.String(50), nullable=False)
    password = db.Column(db.String(200), nullable=False)

上述代码在序列化的时候,就只会序列化id和username两个字段了。

四、递归序列化模型和树:

sqlalchemy_serializer会默认序列化定义好关系的模型,比如有UserModel和PostModel两个模型:

class UserModel(db.Model, SerizlizerMixin):
    serialize_rules = ("-posts",)
    __tablename__ = "user"
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    username = db.Column(db.String(50), nullable=False)
    
class PostModel(db.Model, SerializerMixin):
    __tablename__ = "post"
    id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
    author_id = db.Column(db.String(100), db.ForeignKey("user.id"))
    
    author = db.relationship("UserModel", backref="posts")

在序列化PostModel的时候,也会自动递归序列化author,并且author的值有id和username两个字段。这里有个细节需要注意,就是UserModel必须要排除posts。因为PostModel中的author字段,通过backref给UserModel绑定了一个posts字段,如果不排除posts,那么在序列化author的时候,又会序列化posts,造成循环递归序列化。

五、高级用法:

基本上学会以上用法后,99%的场景都没有问题了。如果你在使用sqlalchemy_serializer还有其他业务需求,比如格式化日期的输出、字段扁平化等,那么可以再仔细阅读一下sqlalchemy_serializer的官方文档:官方文档

项目中引用

Flask SQLAlchemy_Serializer ORM模型序列化,Flask,flask,python,后端
将登录后数据序列化返回
Flask SQLAlchemy_Serializer ORM模型序列化,Flask,flask,python,后端
序列化后的数据,此时看到的跟该用户相关的评论,帖子也序列化了,这就会循环序列化
Flask SQLAlchemy_Serializer ORM模型序列化,Flask,flask,python,后端
可以设置仅序列化的字段
Flask SQLAlchemy_Serializer ORM模型序列化,Flask,flask,python,后端文章来源地址https://www.toymoban.com/news/detail-592850.html

到了这里,关于Flask SQLAlchemy_Serializer ORM模型序列化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flask从入门到放弃五(SQLAlchemy介绍与快速使用、创建表插入数据、Scoped_session线程安全、基本增删查改、表模型、Flask-SQLAlchemy、Migrate的使用)

    SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 SQLAlchemy的组成部分有: Engine 框架的引擎 Connection Pooling 数据库连接池 Dialect 选择连接数据库的

    2024年02月04日
    浏览(53)
  • SqlAlchemy使用教程(五) ORM API 编程入门

    SqlAlchemy使用教程(一) 原理与环境搭建 SqlAlchemy使用教程(二) 入门示例及编程步骤 SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解 SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用 SqlAlchemy使用教程(五) ORM API 编程入门 前一章用SQL表达式(SQL Express)语法操作数据库时,仍然

    2024年01月23日
    浏览(48)
  • python使用SQLAlchemy进行mysql的ORM操作

    现在很多的企业进行后端开发时,程序员在分析完业务后,会使用Java的SpringBoot或者Python的Django、Flask等网络框架进行项目开发。在这些网络框架业务逻辑代码编写的过程中,很大概率会需要使用到MySQL数据库,但是原生的SQL语句又存在被SQL注入的风险,而且在复杂的查询时,

    2024年02月07日
    浏览(52)
  • SQLAlchemy ORM指南:简化数据库操作的最佳实践

    背景: ​ SQLAlchemy是一个数据库的ORM框架,让我们操作数据库的时候不要再用SQL语句了,跟直接操作模型一样。操作十分便捷,其实SQLAlchemy应该是在Flask和Django应用的特别多,而且在flask中已经集成了flask_sqlalchemy ,好像是 SQLAlchemy的作者和 Flask是同一个,背景了解到这里就可

    2024年01月20日
    浏览(94)
  • python常用库之数据库orm框架之SQLAlchemy

    官网:https://www.sqlalchemy.org/ SQLAlchemy是一个基于Python实现的SQL工具包和ORM框架,提供了高层抽象来管理数据库交互。 SQLAlchemy功能强大,可以省去很多手动管理数据库连接、资源、事务等重复工作,让开发者更加高效地使用数据库。许多大型Python项目都选择使用SQLAlchemy作为ORM框架

    2024年02月07日
    浏览(53)
  • SqlAlchemy使用教程(六) -- ORM 表间关系的定义与CRUD操作

    SqlAlchemy使用教程(一) 原理与环境搭建 SqlAlchemy使用教程(二) 入门示例及编程步骤 SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解 SqlAlchemy使用教程(四) MetaData 与 SQL Express Language 的使用 SqlAlchemy使用教程(五) ORM API 编程入门 本章内容,稍微有些复杂,建议腾出2小时空闲时间,

    2024年01月23日
    浏览(56)
  • Python 进阶(三):Python使用ORM框架SQLAlchemy操作Oracle数据库

    要详细连接Oracle数据库并使用SQLAlchemy进行操作,按照以下步骤进行配置和编写代码: Oracle Instant Client:Oracle 提供的客户端库,可用于在 Python 中连接和操作 Oracle 数据库 访问 Oracle 官方网站:前往 Oracle 官方网站(instant-client/winx64-64-downloads) 可能需要创建一个免费的 Oracle

    2024年02月11日
    浏览(49)
  • 【Flask】from flask_sqlalchemy import SQLAlchemy报错

    在使用 flask_sqlalchemy 之前,你需要确保已经通过 pip 安装了 Flask-SQLAlchemy。可以通过以下命令安装它:    pip install Flask-SQLAlchemy Python 是区分大小写的,确保在导入和使用模块时大小写与实际安装的库名称一致。确保你在代码中使用的是 SQLAlchemy,而不是 SQLAlchem。 正确的导入

    2024年02月09日
    浏览(32)
  • 【Flask】SQLAlchemy

    为什么使用orm 优点 有语法提示, 省去自己拼写SQL,保证SQL语法的正确性 orm提供方言功能(dialect, 可以转换为多种数据库的语法), 减少学习成本 防止sql注入攻击 搭配数据迁移, 更新数据库方便 面向对象, 可读性强, 开发效率高 缺点 需要语法转换, 效率比原生sql低 复杂的查询往

    2024年02月13日
    浏览(34)
  • Flask-SQLAlchemy

    认识Flask-SQLAlchemy Flask-SQLAlchemy 是一个为 Flask 应用增加 SQLAlchemy 支持的扩展。它致力于简化在 Flask 中 SQLAlchemy 的使用。 SQLAlchemy 是目前python中最强大的 ORM框架, 功能全面, 使用简单。 ORM优缺点 优点 有语法提示, 省去自己拼写SQL,保证SQL语法的正确性 orm提供方言功能(dialect, 可

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包