#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 数据库查询结果转对象的更多相关文章

  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. Luogu-3250 [HNOI2016]网络

    Luogu-3250 [HNOI2016]网络 题面 Luogu-3250 题解 CDQ分治...这个应该算是整体二分吧 二分重要度,按照时间从小到大加入大于重要度的边 对于一个询问,如果经过这个点的 ...

  2. skynet之伪取消定时器

    1.截至目前群里的成员已经对skynet中的timeout提出了更多的要求.目前skynet提供的定时器是倒计时形式,且定时器一旦设置后,便不能撤销(至少目前的实现是这样),然后调用 cb 最近有人提 ...

  3. 多线程-信号量Semaphore

    计数信号量用来控制同时访问某个特定资源的操作数量.Semaphore可以用于实现资源池,例如数据库连接池.我们可以构造一个固定长度的资源池,当资源池为空的时候,请求资源将会阻塞,而不是失败.当资源池非 ...

  4. Treflection06_调用静态方法

    1. package reflectionZ; import java.lang.reflect.Method; public class Treflection06 { public static ...

  5. ubantu中让g++支持c++11的办法

    g++ main.cpp -std=c++11 -o a 其中: main.cpp是要编译的源文件 a是编译后的文件名 注意-std=c++11不要写成-std=c11

  6. GeometryServer

    http://blog.csdn.net/limina/article/details/8364515

  7. idea结合git使用三

    1.将本地代码提交到码云上面的步骤 2.先提交到本地Git的仓库,通过commit files 3.然后vcs----->git---->push,将本地仓库代码,推送到码云公司项目mas ...

  8. java10---点餐系统

    public class OrderMsg { public static void main(String[] args) throws Exception { /** * 订餐人姓名.选择菜品.送 ...

  9. LeetCode OJ:Product of Array Except Self(除己之外的元素乘积)

    Given an array of n integers where n > 1, nums, return an array output such that output[i] is equ ...

  10. Qt 出现“undefined reference to `vtable for”原因总结

    http://blog.csdn.net/chenlong12580/article/details/7431104