sqlalchemy对象转dict的示例

时间:2022-08-24 00:08:34 


def sa_obj_to_dict(obj, filtrate=None, rename=None):
    """
    sqlalchemy 对象转为dict
    :param filtrate: 过滤的字段
    :type filtrate: list or tuple
    :param rename: 需要改名的,改名在过滤之后处理, key为原来对象的属性名称,value为需要更改名称
    :type rename: dict
    :rtype: dict
    """

    if isinstance(obj.__class__, DeclarativeMeta):
        # an SQLAlchemy class
        #该类的相关类型,即直接与间接父类
        cla = obj.__class__.__mro__
        #过滤不需要的父类
        cla = filter(lambda c: hasattr(c, '__table__'), filter(lambda c: isinstance(c, DeclarativeMeta), cla))
        columns = []
        map(lambda c: columns.extend(c.__table__.columns), cla[::-1])
        # columns = obj.__table__.columns
        if filtrate and isinstance(filtrate, (list, tuple)):
            fields = dict(map(lambda c: (c.name, getattr(obj, c.name)), filter(lambda c: not c.name in filtrate, columns)))
        else:
            fields = dict(map(lambda c: (c.name, getattr(obj, c.name)), columns))
        # fields = dict([(c.name, getattr(obj, c.name)) for c in obj.__table__.columns])
        if rename and isinstance(rename, dict):
            #先移除key和value相同的项
            _rename = dict(filter(lambda (k, v): str(k) != str(v), rename.iteritems()))
            #如果原始key不存在,那么新的key对应的值默认为None
            #如果新的key已存在于原始key中,那么原始key的值将被新的key的值覆盖
            # map(lambda (k, v): fields.setdefault(v, fields.pop(k, None)), _rename.iteritems())
            map(lambda (k, v): fields.update({v: fields.pop(k, None)}), _rename.iteritems())
        #
        return fields
    else:
        return {}

标签:python,sqlalchemy
0
投稿

猜你喜欢

  • Python实现随机划分图片数据集的示例代码

    2021-08-01 16:35:32
  • 什么是Semantics?

    2008-04-16 13:45:00
  • go第三方库sqlx操作MySQL及ORM原理

    2024-01-18 21:12:32
  • python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)

    2023-06-07 22:58:05
  • Python使用scapy模块发包收包

    2021-04-26 16:32:12
  • MySQL中数据表操作详解

    2008-12-29 13:50:00
  • python爬虫字体加密的解决

    2021-02-22 12:25:57
  • 手写一个python迭代器过程详解

    2021-06-29 07:45:23
  • python实现K折交叉验证

    2023-06-08 18:49:01
  • 详解MySQL中DROP,TRUNCATE 和DELETE的区别实现mysql从零开始

    2024-01-13 05:43:07
  • python中进程间通信及设置状态量控制另一个进程

    2022-01-28 08:02:57
  • Python使用Cv2模块识别验证码的操作方法

    2022-07-03 14:37:19
  • 用ReactJS和Python的Flask框架编写留言板的代码示例

    2021-09-29 07:33:14
  • Python 字符串操作实现代码(截取/替换/查找/分割)

    2023-07-14 06:14:00
  • 什么是Ajax及Ajax的优势

    2007-09-07 09:56:00
  • Python 3 使用Pillow生成漂亮的分形树图片

    2022-05-03 14:53:23
  • 针对SQL Server中业务规则链接的分析

    2009-01-20 11:43:00
  • 快速理解MySQL中主键与外键的实例教程

    2024-01-26 16:16:57
  • ASP中使用存储过程介绍

    2008-10-10 12:10:00
  • 解决usageerror: line magic function "%%time" not found问题

    2022-06-16 15:53:29
  • asp之家 网络编程 m.aspxhome.com