sqlalchemy对象转dict的示例


Posted in Python onApril 22, 2014
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 相关文章推荐
python+Django+apache的配置方法详解
Jun 01 Python
python装饰器实例大详解
Oct 25 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
TensorFlow实现Logistic回归
Sep 07 Python
python 产生token及token验证的方法
Dec 26 Python
解决Python selenium get页面很慢时的问题
Jan 30 Python
Python 编程速成(推荐)
Apr 15 Python
Python简单处理坐标排序问题示例
Jul 11 Python
opencv设置采集视频分辨率方式
Dec 10 Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 Python
python实现堆排序的实例讲解
Feb 21 Python
python能在浏览器能运行吗
Jun 17 Python
用pywin32实现windows模拟鼠标及键盘动作
Apr 22 #Python
python实现linux服务器批量修改密码并生成execl
Apr 22 #Python
python中精确输出JSON浮点数的方法
Apr 18 #Python
python中使用OpenCV进行人脸检测的例子
Apr 18 #Python
在python的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 #Python
Python操作json数据的一个简单例子
Apr 17 #Python
python使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 #Python
You might like
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
微信小程序激励式视频广告组件使用详解
2019/12/06 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
python实现文件分组复制到不同目录的例子
2014/06/04 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
python爬虫 批量下载zabbix文档代码实例
2019/08/21 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
序列化Python对象的方法
2020/08/01 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
大学生毕业自我评价范文分享
2013/11/11 职场文书
大学专科生推荐信范文
2013/11/23 职场文书
五一劳动节活动记录
2014/03/23 职场文书
企业安全生产标语
2014/06/06 职场文书
科技活动总结范文
2015/05/11 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
mysql 索引合并的使用
2021/08/30 MySQL