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 开发Activex组件方法
Nov 08 Python
python抓取某汽车网数据解析html存入excel示例
Dec 04 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
获取python文件扩展名和文件名方法
Feb 02 Python
Python使用numpy模块创建数组操作示例
Jun 20 Python
利用python开发app实战的方法
Jul 09 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
python环境下安装opencv库的方法
Mar 05 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 Python
Python Celery异步任务队列使用方法解析
Aug 10 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 Python
Pygame Draw绘图函数的具体使用
Nov 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类的使用 实例代码讲解
2009/12/28 PHP
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
2019/09/02 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
Python下载指定页面上图片的方法
2016/05/12 Python
django model去掉unique_together报错的解决方案
2016/10/18 Python
python脚本替换指定行实现步骤
2017/07/11 Python
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
python删除字符串中指定字符的方法
2018/08/13 Python
python通过http下载文件的方法详解
2019/07/26 Python
Python函数式编程实例详解
2020/01/17 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
简短大学毕业感言
2014/01/18 职场文书
建筑工程技术专业求职信
2014/07/16 职场文书
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
宾馆客房管理制度
2015/08/06 职场文书
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL