flask ORM 序列化和反序列化的两种方法

flask ORM 序列化和反序列化的两种方法

  • 使用marshmallow 对数据进行序列化和反序列化

    • from marshmallow import Schema, fields, post_load
      
      from SQLconfig.models import *
      
      
      class User_ser(Schema):  # 建立和数据库模型一样的类继承marshmallow中的Schema类
          id = fields.Integer()  # 使用marshmallow中的fields来约束数据类型
          username = fields.Str()
          email = fields.Email()
      
          @post_load  # 使用post_load来装饰json>object的函数
          def make_user(self, data, **kwargs):
              return User(**data)
      
      
      schema = User_ser()  # 实例化模型类
      
      
      def user_serialize(args):
          resCode = 200
          resMsg = '成功'
          data_message = schema.load(args) #对json数据进行反序列化
          db.session.add(data_message) #进行入库
          try:
              db.session.commit()
          except Exception as e:
              print(e)
          return {'rescode': resCode, 'resmsg': resMsg, 'data': []}
      
      
      def user_get():
          resCode = 200
          resMsg = '成功'
          data = User.query.all() #查询需要的数据
          # data_message=[ i.serialize for i in data ]
          data_message = schema.dump(data, many=True) #对数据进行序列化,多条数据加many=True
          return {'rescode': resCode, 'resmsg': resMsg, 'data': data_message}
      
      
  • 第二种方法,自定义数据转换

    • def to_json(inst, cls):  # 自定义数据类型转换将object转换为json
          ret_dict = {}
          for i in cls.__table__.columns:  # 获取到模型对象的所有列
              value = getattr(inst, i.name)  # 获取对象的属性值
              if isinstance(value, datetime.datetime):  # 对时间进行转换
                  value = value.strftime('%Y-%m-%d %H:%M:%S')
              ret_dict[i.name] = value  # 添加到字典中
          return ret_dict
      
      
      class User(db.Model):
          __tablename__ = 'user'
          id = db.Column(db.Integer, primary_key=True, autoincrement=True)
          username = db.Column(db.String(50))
          email = db.Column(db.String(80))
      
          @property  # 使用property获取对象的属性
          def serialize(self):
              return to_json(self, self.__class__)  # 直接返回实例对象本身和类本身
      def user_get():
          resCode = 200
          resMsg = '成功'
          data = User.query.all()  # 查询需要的数据
          # data_message=[ i.serialize for i in data ] # 使用列表推导式来封装成json格式
          data_message = schema.dump(data, many=True)  # 对数据进行序列化,多条数据加many=True
          return {'rescode': resCode, 'resmsg': resMsg, 'data': data_message}
      
      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值