最近使用开辟的过程中出现了一个小问题,顺便记录一下原因和方法--格式资料

最近,给自己开辟的软件平台开辟第三方调用的API,如果返回结果集是json格式,其他语言开辟就绝对便利一些,网上找了好多资料没有找到特殊合适的,最后下决心根据网上的资料转变自己写一个通用的。

此方法,主要应用场景是,Python 数据库框架 sqlalchemy 查询结果,转化成json格式。

每日一道理
如果你们是蓝天,我愿做衬托的白云;如果你们是鲜花,我愿做陪伴的小草;如果你们是大树,我愿做点缀的绿叶……我真诚地希望我能成为你生活中一个欢乐的音符,为你的每一分钟带去祝福。
# -*- coding: utf-8 -*-
import os
import json
import threadingfrom xml.dom import minidom
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy import (create_engine,MetaData,Column,Integer,String)
from sqlalchemy import func
from sqlalchemy.sql.expression import and_, or_
from sqlalchemy import Table, Column, Integer, String, Text, DateTime, MetaData, ForeignKey, Boolean
from datetime import datetime
import time,uuid,reBase = declarative_base()#主机模型
class VirtualMachineContainer(Base):__tablename__ = 'virtual_machine_containers'id = Column(Integer, primary_key = True)hostname = Column(String(255))uuid = Column(String(255))address = Column(String(255))port = Column(Integer)status = Column(String(255))owner_id = Column(Integer)group_id = Column(Integer)cluster_id = Column(Integer)running_time = Column(Integer)cpu_type = Column(String(255))cpu_num = Column(String(255))cpu_usage = Column(String(255))mem_total = Column(String(255))mem_free = Column(String(255))disk_device = Column(String(255))disk_total = Column(String(255))disk_free = Column(String(255))nics_num = Column(Integer)net_ifname = Column(String(255))net_tx = Column(String(255))net_rx = Column(String(255))vm_name = Column(String(255))vm_state = Column(String(255))vcpu_usage = Column(String(255))vmem_total = Column(String(255))vmem_free = Column(String(255))vdisk_read = Column(String(255))vdisk_write = Column(String(255))vif_tx = Column(String(255))vif_rx = Column(String(255))field_metadata = Column('metadata', String(255))created_at = Column(DateTime, default=datetime.now)updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)vm_uuid = Column(Text)capability = Column(String(255))vdisk_names = Column(String(255))vif_names = Column(String(255))all_pair_ping = Column(Text)vnc_port = Column(String(255))vm_cnt = Column(Integer)respool_cnt = Column(String(255))reserved = Column(String(255))host_desc = Column(Text)host_vendor_name = Column(String(255))host_type = Column(String(255))oper_system_vendor_name = Column(String(255))oper_system_name = Column(String(255))uuid_bios = Column(String(255))dns = Column(String(255))cpu_core_num = Column(String(255))cpu_thread_num = Column(String(255))diskarray_num = Column(String(255))datacenter_id = Column(Integer, ForeignKey('data_centers.id'))user_name = Column(String(255))password = Column(String(255))status_flag = Column(Integer(1))hardware_id = Column(String(16))def get_Session():#engine = create_engine('mysql://root:root@172.30.36.7/ivcs_portal?charset=utf8')engine = create_engine('mysql://root:@172.30.36.7/ivcs_portal?charset=utf8')Base.metadata.create_all(engine)Session =sessionmaker( autocommit=False, autoflush=False, bind=engine)return Session
from sqlalchemy.ext.declarative import DeclarativeMeta
class AlchemyEncoder(json.JSONEncoder):def default(self, obj):if isinstance(obj.__class__, DeclarativeMeta):# an SQLAlchemy classfields = {}for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']:data = obj.__getattribute__(field)try:if isinstance(data, datetime): data=data.strftime('%Y-%m-%d %H:%M:%S') json.dumps(data) # this will fail on non-encodable values, like other classesfields[field] = dataexcept TypeError:fields[field] = None# a json-encodable dictreturn fieldsreturn json.JSONEncoder.default(self, obj)
def new_alchemy_encoder():_visited_objs = []class AlchemyEncoder(json.JSONEncoder):def default(self, obj):if isinstance(obj.__class__, DeclarativeMeta):# don't re-visit selfif obj in _visited_objs:return None_visited_objs.append(obj)# an SQLAlchemy classfields = {}for field in [x for x in dir(obj) if not x.startswith('_') and x != 'metadata']:data = obj.__getattribute__(field)try:if isinstance(data, datetime): data=data.strftime('%Y-%m-%d %H:%M:%S') json.dumps(data) # this will fail on non-encodable values, like other classesfields[field] = dataexcept TypeError:fields[field] = Nonereturn fieldsreturn json.JSONEncoder.default(self, obj)return AlchemyEncoderdef testjson():session=get_Session()()vmcs = session.query(VirtualMachineContainer).all()try:Hosts =[]for vmc in vmcs:#print json.dumps(vmc, cls=AlchemyEncoder)Hosts.append(vmc)print json.dumps(Hosts, cls=new_alchemy_encoder(), check_circular=False)except Exception, e:print e  if __name__ == '__main__':testjson()

文章结束给大家分享下程序员的一些笑话语录: 人脑与电脑的相同点和不同点,人脑会记忆数字,电脑也会记忆数字;人脑会记忆程序,电脑也会记忆程序,但是人脑具有感知能力,这种能力电脑无法模仿,人的记忆会影响到人做任何事情,但是电脑只有程序软件。比尔还表示,人脑与电脑之间最重要的一个差别就是潜意识。对于人脑存储记忆的特别之处,比尔表示,人脑并不大,但是人脑重要的功能是联络,人脑会把同样的记忆存储在不同的地方,因此记忆读取的速度就不相同,而这种速度取决于使用的频率和知识的重要性。人脑的记忆存储能力会随着年龄增长而退化,同时记忆的质量也会随着年龄退化。经典语录网

格式资料python sqlalchemy 查询结果转化为 Json格式相关推荐

  1. php输出json到表格,PHP中把数据库查询结果输出为json格式

    header("Content-type:text/html;charset=utf-8");//字符编码设置 $servername = "localhost" ...

  2. python类型转换异常_python知识:json格式文本;异常处理;字符串处理;unicode类型和str类型转换...

    python进程中的实例和json格式的字符串之间的映射关系是非常直接的,相当于同一个概念被编码成不同的表示: stream in json form ----json.loads(str)----- ...

  3. 将网址url中的参数转化为JSON格式的两种方法

    在我们进入主题前,我先先看下获取网址URL的方法: window.location.href // 设置或获取整个URL为字符串 window.location.hash // 设置或获取href属性 ...

  4. 数据传输:json格式序列化与反序列化(将类转化为json格式与将json格式转化为类)

    数据传输:json格式序列化与反序列化(将类转化为json格式与将json格式转化为类) 在最近的实验中,使用了json来传送客户端与服务端的信息,之前原本想使用自己定义的格式,但是使用json可以将 ...

  5. (八): 查询结果直接返回Json格式数据

    Bee简单易用:单表操作.多表关联操作,可以不用写sql,极少语句就可以完成SQL操作:10分钟即可学会使用. Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化. ...

  6. uc浏览器下载的视频php格式,如何将UC缓存的视频转化为通用的MP4格式?将缓存的视频转化为MP4格式的方法...

    用户在使用uc浏览器的时候,总会需要下载视频,那么用户要如何使用才能将浏览器缓存的视频转化成平常使用的mp4格式呢?用户可以将格式转换,在需要互相传递的时候就会更加的方便,如果你也喜欢这个服务,想要使 ...

  7. excel文件中的数据转化为json格式并输出json文件

    1:需求: 将excel中的数据获取出来,转化为json格式,之后输出到.json文件中. 2:步骤: (1): 将excel中的数据获取出来,使用jsonObject转化为json格式字符串 (2) ...

  8. python response.json()报错_Django JsonResponse json格式报错 解决Django响应JsonResponse返回json格式数据报错问题...

    想了解解决Django响应JsonResponse返回json格式数据报错问题的相关内容吗,彭世瑜在本文为您仔细讲解Django JsonResponse json格式报错的相关知识和一些Code实例 ...

  9. oracle 修改默认日期格式_查看MySQL查询计划的方法和格式

    查看MySQL的查询计划是分析查询的重要方法,可以通过使用EXPLAIN语句来确认优化器将采取哪种查询计划,是否与你的预期一致. 如何使用EXPLIAN?使用它有两种方式: 直接在查询语句之前直接加上 ...

最新文章

  1. 谁说女生不能搞IT?一名女程序员的奋斗史
  2. thymeleaf 使用页面报错_异常处理-SpringBoot中thymeleaf对应前台页面大于号\小于号使用问题...
  3. java注解方式实体类_如何用注解的方式在实体类中实现一对一,和一对多多对多...
  4. dex2oat 加载多次
  5. css出现的问题以及解决,div+css的浮动常出现的问题以及解决办法_html/css_WEB-ITnose...
  6. HBase表创建、删除、清空
  7. Codeforces Round #401 (Div. 2) D. Cloud of Hashtags
  8. python 分词 识别_python分词如何实现新词识别
  9. python 计算时间重叠_python whilepython计算两个矩形框重合百分比的实例
  10. 分布式共识算法 (Consensus Algorithm)
  11. 计算机设备管理系统论文,设备管理系统论文-.doc
  12. 【BZOJ2959】长跑 LCT+并查集
  13. Delphi中Hash表的使用方法!
  14. eplan p8详细安装步骤文库_eplan p8详细安装步骤
  15. MATLAB 软件安装与无法打开问题
  16. SVNServer中的权限问题
  17. kafka详细安装运行
  18. 重新认识 D 编程语言 —— 基础篇
  19. angular cli + primeNG
  20. 项目提示JDK版本问题或者语言级别问题时的解决办法

热门文章

  1. Beta 冲刺(6/7)
  2. excel设置单元格为文本
  3. 编程面试过程中最常见的10大算法
  4. Dell 2950服务器CPU-E1422错误解决方法
  5. java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
  6. ASP.NET那点不为人知的事(四)
  7. powerbuider11 C/S 转换为B/S
  8. 信息增益有负值吗_一个自动化设备的信息化改造项目,谈谈自动化工程师转型之路—IT融合OT...
  9. java 异步事件_处理异步事件的三种方式
  10. 免校准的电量计量芯片_万物互联,开启智慧计量新时代—2020年中国物联网计量创新发展论坛在济南举办...