python 数据库查询结果转对象
- #coding:utf-8
- from json import dumps, loads, JSONEncoder, JSONDecoder
- import pickle
- from app.model.Jsonable import Jsonable
- from sqlalchemy.ext.declarative import DeclarativeMeta
- import jira
- from jira.resources import User
- import datetime
- import json
- #python对象编码为json对象统一方法,用法为 json.dumps(project, cls=PythonObjectEncoder)
- class PythonObjectEncoder(JSONEncoder):
- def default(self, obj):
- if isinstance(obj, (list, dict, str, int, float, bool, type(None), Jsonable, jira.resources.Resource)):
- fields = {}
- for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']:
- data = obj.__getattribute__(field)
- try:
- # this will fail on non-encodable values, like other classes
- dumps(data)
- fields[field] = data
- except TypeError:
- fields[field] = None
- # a json-encodable dict
- return fields
- return JSONEncoder.default(self, obj)
- class AlchemyEncoder(json.JSONEncoder):
- def default(self, obj):
- if isinstance(obj.__class__, DeclarativeMeta):
- # an SQLAlchemy class
- fields = {}
- # for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata' and not hasattr(obj.__class__.__bases__,x)]:
- for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata' and x != 'query' and x != 'query_class']:
- data = obj.__getattribute__(field)
- try:
- # this will fail on non-encodable values, like other classes
- json.dumps(data)
- fields[field] = data
- except TypeError: # 添加了对datetime的处理
- if isinstance(data, datetime.datetime):
- #fields[field] = data.isoformat()
- fields[field] = data.strftime('%Y-%m-%d %H:%M:%S')
- elif isinstance(data, datetime.date):
- #fields[field] = data.isoformat()
- fields[field] = data.strftime('%Y-%m-%d')
- elif isinstance(data, datetime.timedelta):
- fields[field] = (
- datetime.datetime.min + data).time().isoformat()
- # elif isinstance(data.__class__, DeclarativeMeta):
- # json.dumps(data,cls=AlchemyEncoder)
- # pass
- else:
- fields[field] = None
- # a json-encodable dict
- return fields
- return json.JSONEncoder.default(self, obj)
- class DateTimeEncoder(json.JSONEncoder):
- def default(self, obj):
- if isinstance(obj, datetime.datetime):
- return obj.strftime('%Y-%m-%d %H:%M:%S')
- elif isinstance(obj, datetime.date):
- return obj.strftime('%Y-%m-%d')
- elif isinstance(obj.__class__, DeclarativeMeta):
- return dumps(obj,cls=AlchemyEncoder)
- else:
- return json.JSONEncoder.default(self, obj)
- class ModelToJsonObject(object):
- def to_json(self,obj):
- if isinstance(obj.__class__, DeclarativeMeta):
- return json.loads(json.dumps(obj,AlchemyEncoder))
- else:
- return json.loads
python 数据库查询结果转对象的更多相关文章
- python 数据库查询条件`不等于`
1.python 数据库查询条件不等于 当在做数据库查询的时候,想根据业务需求进行条件的筛选或过滤, 但是django封装的数据库语句中没有 '不等于' 查询操作. 2.例如:通过以下语句进行'不等于 ...
- python数据库查询转dataframe
1. 场景描述 python环境下需要从greenplum/postgresql中,获取算法执行的数据,但是从数据库中查询出来是数组格式的,算法无法使用,需要转换为dataframe格式. 2. 解决 ...
- Python数据库查询之组合条件查询-F&Q查询
F查询(取字段的值) 关于查询我们知道有filter( ) ,values( ) , get( ) ,exclude( ) ,如果是聚合分组,还会用到aggregate和annotate,甚至还有万能 ...
- python 数据库查询,将查询的列名也保存下来,返回字典类型的数据
前言: python + pymysql:通过pymysql,查询到符合要求的数据,不做类型转化的,返回的时元组类型的数据,可以根据下标,取想要的值. self.cursor.execute(sql) ...
- python 数据库查询
查询多个为空返回是() 查询一个为空返回是None
- Python 数据库的Connection、Cursor两大对象
Python 数据库的Connection.Cursor两大对象 pymysql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. Python 数据库图解流程 Con ...
- python操作oracle数据库-查询
python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...
- Python中的Django框架中prefetch_related()函数对数据库查询的优化
实例的背景说明 假定一个个人信息系统,需要记录系统中各个人的故乡.居住地.以及到过的城市.数据库设计如下: Models.py 内容如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- 让 Python 的1、数据库查询返回字典记录--- 2、利用zip函数将两个列表(list)组成字典(dict)
让 Python 的数据库查询返回字典记录: https://yanbin.blog/python-database-query-return-dictionary-result/#more-9179 ...
随机推荐
- windchill系统——开发_菜单栏添加选项(模型添加action)
目录:C:\ptc\Windchill_11.0\Windchill\codebase\config\actions 文件:custom-actionModels.xml和custom-actions ...
- 一篇看懂++i i++
/** * @Title:Test03 * @Description: * @author Crazy-ZJ * @data 2017年9月28日上午9:38:00 * @book 疯狂java讲义( ...
- UOJ34 多项式乘法(非递归版)
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- Listview_简单使用_(Virtual)
1.代码来自于“C:\Program Files (x86)\Borland\Delphi7\Demos\Virtual Listview” 1.1.是使用 ListView来显示数据 1.2.自己管 ...
- scala学习手记7 - 运算符重载
从语法上来说scala是没有运算符的.之前的一节里也曾提到过scala的运算符实际上是方法名,如1 + 2实际上就是1.+(2).我们可以将之视为运算符,是因为scala的一个特性:如果方法的参数小于 ...
- 构造函数=default表示什么?
myClass()=default;//表示默认存在构造函数
- DDOS 攻击工具
DDOS 攻击工具 使用github上的DDOS攻击工具 https://github.com/Ha3MrX/DDos-Attack 将python脚本拷贝到主机,使用 chmod +x ddos- ...
- Django进阶Model篇005 - QuerySet常用的API
django.db.models.query.QuerySet QuerySet特点: 1.可迭代 2.可切片 查询相关API 1.get(**kwargs):返回与所给的筛选条件相匹配的对象,返回结 ...
- 【sparkSQL】创建DataFrame及保存
首先我们要创建SparkSession val spark = SparkSession.builder() .appName("test") .master("loca ...
- LeetCode OJ:Longest Common Prefix(最长公共前缀)
Write a function to find the longest common prefix string amongst an array of strings. 求很多string的公共前 ...