flask框架-实现model_to_dict,能够处理时间字段,过滤指定字段,将json字符串转为python数据

一、model_to_dict:

只能对单个数据操作,

import json
import datetime

#对单个模型操作
def model_to_dict(model, fields=None):
    """
    将Flask SQLAlchemy的模型对象转换为字典类型
    :param: model : 模型对象
    :param: fields : 需要获取的字段列表,默认为 None,获取全部字段
    :return: 返回字典类型
    """

    if fields is None:
        # 获取所有列名
        columns = [column.name for column in model.__table__.columns]
        # 排除掉relationships 设置的反向查询字段
        relations = getattr(model.__class__, '__mapper__').relationships
        exclude_cols = [rel.key for rel in relations]
        # print(exclude_cols,'要剔除的反向查询字段')
        #拿到所有列名-排除的列名
        cols = set(columns) - set(exclude_cols)
        fields = list(cols)

    obj_dict = {}
    for field in fields:
        if field not in model.__dict__:
            continue

        value = model.__dict__[field]
        #1、对时间字段进行操作
        if isinstance(value, datetime.datetime):
            #字段类型是datetime的,格式化
            value = value.strftime('%Y-%m-%d %H:%M:%S')
        if isinstance(value,datetime.date):
            #字段类型是date的,格式化
            value = value.strftime('%Y-%m-%d')
        #2、将所有可以进行序列化的进行序列化
        if isinstance(value,str):
            try:
                value = json.loads(value)
            except Exception as _:
                pass

        obj_dict[field] = value

    return obj_dict

使用:

class AuthorView(MethodView):
    def get(self):
        author = models.AuthorModel.query.first()
        dic = model_to_dict(author,fields=['id','name','address'])
        return {'code':200,'dic':dic}

二、model_to_dict_list

代码:

#对数据集操作
def model_to_dict_list(queryset,fields=None):

    ret = []
    for obj in queryset:
        dic = model_to_dict(obj,fields=fields)
        ret.append(dic)
    return ret

使用:

class AuthorView(MethodView):
    def get(self):
        authors = models.AuthorModel.query.all()
        dic = model_to_dict_list(authors,fields=['id','name','address'])
        return {'code':200,'dic':dic}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值