1. #coding:utf-8
  2. from json import dumps, loads, JSONEncoder, JSONDecoder
  3. import pickle
  4. from app.model.Jsonable import Jsonable
  5. from sqlalchemy.ext.declarative import DeclarativeMeta
  6. import jira
  7. from jira.resources import User
  8. import datetime
  9. import json
  10.  
  11. #python对象编码为json对象统一方法,用法为 json.dumps(project, cls=PythonObjectEncoder)
  12. class PythonObjectEncoder(JSONEncoder):
  13. def default(self, obj):
  14. if isinstance(obj, (list, dict, str, int, float, bool, type(None), Jsonable, jira.resources.Resource)):
  15. fields = {}
  16. for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']:
  17. data = obj.__getattribute__(field)
  18. try:
  19. # this will fail on non-encodable values, like other classes
  20. dumps(data)
  21. fields[field] = data
  22. except TypeError:
  23. fields[field] = None
  24. # a json-encodable dict
  25. return fields
  26. return JSONEncoder.default(self, obj)
  27.  
  28. class AlchemyEncoder(json.JSONEncoder):
  29. def default(self, obj):
  30. if isinstance(obj.__class__, DeclarativeMeta):
  31. # an SQLAlchemy class
  32. fields = {}
  33. # for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata' and not hasattr(obj.__class__.__bases__,x)]:
  34. for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata' and x != 'query' and x != 'query_class']:
  35. data = obj.__getattribute__(field)
  36. try:
  37. # this will fail on non-encodable values, like other classes
  38. json.dumps(data)
  39. fields[field] = data
  40. except TypeError: # 添加了对datetime的处理
  41. if isinstance(data, datetime.datetime):
  42. #fields[field] = data.isoformat()
  43. fields[field] = data.strftime('%Y-%m-%d %H:%M:%S')
  44. elif isinstance(data, datetime.date):
  45. #fields[field] = data.isoformat()
  46. fields[field] = data.strftime('%Y-%m-%d')
  47. elif isinstance(data, datetime.timedelta):
  48. fields[field] = (
  49. datetime.datetime.min + data).time().isoformat()
  50. # elif isinstance(data.__class__, DeclarativeMeta):
  51. # json.dumps(data,cls=AlchemyEncoder)
  52. # pass
  53. else:
  54. fields[field] = None
  55. # a json-encodable dict
  56. return fields
  57.  
  58. return json.JSONEncoder.default(self, obj)
  59.  
  60. class DateTimeEncoder(json.JSONEncoder):
  61. def default(self, obj):
  62. if isinstance(obj, datetime.datetime):
  63. return obj.strftime('%Y-%m-%d %H:%M:%S')
  64. elif isinstance(obj, datetime.date):
  65. return obj.strftime('%Y-%m-%d')
  66. elif isinstance(obj.__class__, DeclarativeMeta):
  67. return dumps(obj,cls=AlchemyEncoder)
  68. else:
  69. return json.JSONEncoder.default(self, obj)
  70.  
  71. class ModelToJsonObject(object):
  72. def to_json(self,obj):
  73. if isinstance(obj.__class__, DeclarativeMeta):
  74. return json.loads(json.dumps(obj,AlchemyEncoder))
  75. else:
  76. return json.loads

python 数据库查询结果转对象的更多相关文章

  1. python 数据库查询条件`不等于`

    1.python 数据库查询条件不等于 当在做数据库查询的时候,想根据业务需求进行条件的筛选或过滤, 但是django封装的数据库语句中没有 '不等于' 查询操作. 2.例如:通过以下语句进行'不等于 ...

  2. python数据库查询转dataframe

    1. 场景描述 python环境下需要从greenplum/postgresql中,获取算法执行的数据,但是从数据库中查询出来是数组格式的,算法无法使用,需要转换为dataframe格式. 2. 解决 ...

  3. Python数据库查询之组合条件查询-F&Q查询

    F查询(取字段的值) 关于查询我们知道有filter( ) ,values( ) , get( ) ,exclude( ) ,如果是聚合分组,还会用到aggregate和annotate,甚至还有万能 ...

  4. python 数据库查询,将查询的列名也保存下来,返回字典类型的数据

    前言: python + pymysql:通过pymysql,查询到符合要求的数据,不做类型转化的,返回的时元组类型的数据,可以根据下标,取想要的值. self.cursor.execute(sql) ...

  5. python 数据库查询

    查询多个为空返回是() 查询一个为空返回是None

  6. Python 数据库的Connection、Cursor两大对象

    Python 数据库的Connection.Cursor两大对象 pymysql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. Python 数据库图解流程 Con ...

  7. python操作oracle数据库-查询

    python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...

  8. Python中的Django框架中prefetch_related()函数对数据库查询的优化

    实例的背景说明 假定一个个人信息系统,需要记录系统中各个人的故乡.居住地.以及到过的城市.数据库设计如下: Models.py 内容如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  9. 让 Python 的1、数据库查询返回字典记录--- 2、利用zip函数将两个列表(list)组成字典(dict)

    让 Python 的数据库查询返回字典记录: https://yanbin.blog/python-database-query-return-dictionary-result/#more-9179 ...

随机推荐

  1. windchill系统——开发_菜单栏添加选项(模型添加action)

    目录:C:\ptc\Windchill_11.0\Windchill\codebase\config\actions 文件:custom-actionModels.xml和custom-actions ...

  2. 一篇看懂++i i++

    /** * @Title:Test03 * @Description: * @author Crazy-ZJ * @data 2017年9月28日上午9:38:00 * @book 疯狂java讲义( ...

  3. UOJ34 多项式乘法(非递归版)

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  4. Listview_简单使用_(Virtual)

    1.代码来自于“C:\Program Files (x86)\Borland\Delphi7\Demos\Virtual Listview” 1.1.是使用 ListView来显示数据 1.2.自己管 ...

  5. scala学习手记7 - 运算符重载

    从语法上来说scala是没有运算符的.之前的一节里也曾提到过scala的运算符实际上是方法名,如1 + 2实际上就是1.+(2).我们可以将之视为运算符,是因为scala的一个特性:如果方法的参数小于 ...

  6. 构造函数=default表示什么?

    myClass()=default;//表示默认存在构造函数

  7. DDOS 攻击工具

    DDOS  攻击工具 使用github上的DDOS攻击工具 https://github.com/Ha3MrX/DDos-Attack 将python脚本拷贝到主机,使用 chmod +x ddos- ...

  8. Django进阶Model篇005 - QuerySet常用的API

    django.db.models.query.QuerySet QuerySet特点: 1.可迭代 2.可切片 查询相关API 1.get(**kwargs):返回与所给的筛选条件相匹配的对象,返回结 ...

  9. 【sparkSQL】创建DataFrame及保存

    首先我们要创建SparkSession val spark = SparkSession.builder() .appName("test") .master("loca ...

  10. LeetCode OJ:Longest Common Prefix(最长公共前缀)

    Write a function to find the longest common prefix string amongst an array of strings. 求很多string的公共前 ...