sqlalchemy对象转dict的示例

 更新时间:2014年04月22日 09:58:00   作者:  
这篇文章主要介绍了sqlalchemy对象转dict的示例,需要的朋友可以参考下

复制代码 代码如下:

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 {}

相关文章

  • 解读MaxPooling1D和GlobalMaxPooling1D的区别

    解读MaxPooling1D和GlobalMaxPooling1D的区别

    这篇文章主要介绍了MaxPooling1D和GlobalMaxPooling1D的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Pandas实现Dataframe的重排和旋转

    Pandas实现Dataframe的重排和旋转

    使用Pandas的pivot方法可以将DF进行旋转变换,本文将会详细讲解pivot的秘密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Python函数进阶与文件操作详情

    Python函数进阶与文件操作详情

    这篇文章主要介绍了Python函数进阶与文件操作详情,文章为荣啊主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Django入门优缺点及环境搭建流程

    Django入门优缺点及环境搭建流程

    这篇文章主要为大家介绍了Django入门优缺点及环境搭建流程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 解决遇到PermissionError:[Errno 13] Permission denied:XXXX错误的问题

    解决遇到PermissionError:[Errno 13] Permission den

    遇到"PermissionError:[Errno 13] Permission denied"通常是权限不足导致,解决此问题的方法包括检查并更改文件权限,使用管理员权限运行命令,或接触文件所有者,这些步骤有助于确保用户具有执行操作所需的权限,有时,文件或目录可能被锁定
    2024-09-09
  • python基于爬虫+django,打造个性化API接口

    python基于爬虫+django,打造个性化API接口

    这篇文章主要介绍了python基于爬虫+django,打造个性化API接口的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • 一文教你利用Python画花样图

    一文教你利用Python画花样图

    这篇文章主要给大家介绍了关于如何利用Python画花样图的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-10-10
  • 通过Plotly实现交互式数据可视化的流程步骤

    通过Plotly实现交互式数据可视化的流程步骤

    在数据科学和数据分析领域,数据可视化是一种非常重要的技术,Plotly 是一个功能强大的 Python 可视化库,它可以帮助我们创建交互式的数据可视化图表,本文将介绍如何使用 Plotly 实现交互式数据可视化,需要的朋友可以参考下
    2024-05-05
  • Python数据库sqlite3图文实例详解

    Python数据库sqlite3图文实例详解

    SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎,下面这篇文章主要给大家介绍了关于Python数据库sqlite3的相关资料,需要的朋友可以参考下
    2022-09-09
  • 解决os.path.isdir() 判断文件夹却返回false的问题

    解决os.path.isdir() 判断文件夹却返回false的问题

    今天小编就为大家分享一篇解决os.path.isdir() 判断文件夹却返回false的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11

最新评论