数据库查询转excel小工具

因业务需求需要经常从数据库拉数据生成excel

每次都从数据库软件中操作贼烦

于是自己随便写了一个

有需要得拿去用吧

import psycopg2
import psycopg2.pool
import xlsxwriter

class Sql:
    ‘‘‘
    database:库名
    user:用户名
    password:密码
    host:地址
    port:端口
    ‘‘‘
    def __init__(self,database,user,password,host,port):
        self.database=database
        self.user=user
        self.password=password
        self.host=host
        self.port=port
    def _sql(self):
        self.conn = psycopg2.connect(database=self.database, user=self.user,
                                     password=self.password,host=self.host, port=self.port)
        self.cursor = self.conn.cursor()

    def close(self):
        self.cursor.close()
        self.conn.close()

    def select(self,sql,args=None):
        self._sql()
        #查询语句
        try:
            self.cursor.execute(sql,args)
            coloumns = [row[0] for row in self.cursor.description]
            result = [[str(item) for item in row] for row in self.cursor.fetchall()]
            return [dict(zip(coloumns, row)) for row in result],coloumns
        except Exception as ex:
            print(ex)
        finally:
            self.close()

    def execute(self,sql,args=None):
        ###修改提交语句
        self._sql()
        try:
            self.cursor.execute(sql,args)
            self.conn.commit()
            res=self.cursor.rowcount
            return res
        except Exception as x:
            print(x)
        finally:
            self.close()

def run(title,field,wbk,data,sheet_name):

    sheet1 = wbk.add_worksheet(sheet_name)
    get_excel(sheet1, title, data, field)

def get_excel(sheet,cov,res,rov):
    row=1
    sheet.write_row(‘A1‘, cov)
    for line in res:
        l=[]
        for i in range(len(rov)):
             l.append(line[rov[i]])
        sheet.write_row(row, 0, l)
        row += 1

if __name__ == ‘__main__‘:
    wbk = xlsxwriter.Workbook(‘weibo.xlsx‘)####生成excel对象
    sql = Sql("uniqlo_reviews_analytics","bigodata","B1g0uniqlo","117.50.14.201","22432")###生成Sql类
    post_data , columns = sql.select(‘‘‘select * from stagingdata.posts WHERE createrdtime::date BETWEEN ‘{0}‘::date and ‘{1}‘::date
                  ‘‘‘.format(‘2019-05-01‘,‘2019-05-31‘))####返回数据集  和所有字段集
    title=[‘帖子id‘,‘发帖人‘,‘微博内容‘,‘发帖时间‘,‘评论数‘,‘转发数‘,‘点赞数‘]#标题名 也可以传columns
    field=[‘posterid‘,‘postername‘,‘weibo‘,‘createrdtime‘,‘hnum‘,‘forward‘,‘aproval‘]#字段名  也可以传columns

    reply_data, columns = sql.select(‘‘‘select * from stagingdata.reply t1 WHERE  EXISTS
                  (select 0 from stagingdata.posts WHERE createrdtime::date BETWEEN ‘{0}‘::date and ‘{1}‘ and
                t1.posterid=posterid)
                      ‘‘‘.format(‘2019-05-01‘, ‘2019-05-31‘))  ####返回数据集  和所有字段集
    title1 = [‘评论id‘, ‘评论内容‘, ‘评论时间‘,‘帖子id‘]  # 标题名 也可以传columns
    field1 = [‘commentid‘, ‘comment_text‘, ‘comment_time‘,  ‘posterid‘]  # 字段名  也可以传columns

    run(title,field,wbk,post_data,‘帖子‘)
    run(title1, field1, wbk, reply_data,‘评论‘)
    wbk.close()

在很大程度上,python更注重可读性、一致性和软件质量,python的设计致力于可读性,带来了比其他语言更优秀的可重用性和可维护性,python秉承了一种独特的简洁和高可读性的语法,以及一种高度一致的编程序模式。

相对于C、C++、Java等编辑/静态类型语言,python的开发效率提升了3-5倍,也就是说代码量是其他编程语言的1/5-1/3,而且无需编译、链接步骤,提高程序员效率

绝大多数python程序能不做任何修改即可在所有主流计算机平台上运行,此外,python提供多种可选的独立程序,如用户图形界面、数据库接入、基于web系统、还提供了操作系统接口等。

python内置了众多预编译并可移植的功能模块,涵盖了从字符模式到网络编程等一系列应用级编程任务;此外,python可通过自行开发的库和众多的第三方库简化编程,第三方库包括网站开发、数值计算、串口编写、游戏开发等各个应用场景。

python脚本通过灵活的集成机制轻松的与应用程序的其他部分进行通信,这种集成使得python成为产品定制和扩展的工具,如今,python程序可以与C、C++相互调用,可以与java组件集成,与COM、.NET矿建通信。

python的易用性和强大的内置工具和第三方库使得编程成为一种乐趣而不是琐碎的重复劳动。

原文地址:https://www.cnblogs.com/songxuexiang/p/10972736.html

时间: 2024-10-16 01:18:15

数据库查询转excel小工具的相关文章

spring MVC +freemarker + easyui 实现sql查询和执行小工具总结

项目中,有时候线下不能方便的连接项目中的数据源时刻,大部分的问题定位和处理都会存在难度,有时候,一个小工具就能实时的查询和执行当前对应的数据源的库.下面,就本人在项目中实际开发使用的小工具,实时的介绍开发使用过程.首先看图:大概的操作界面,基本使用easyui组件实现,欢迎大家吐槽: 界面包含了基本的sql查询 和 sql执行的小功能,把查询和执行分开,也是为了后台实现的需要,以及权限控制的考虑,毕竟执行的操作,会影响到系统的数据问题.查询和执行的菜单,是用easyui的手风琴式的菜单处理的.两

SQL查询条件生成小工具

最近运维数据,经常遇到需要在sql条件中个In('',''....)个字符串的情况,于是在网上找了个小工具改造一下,先用着: 效果如图: 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 using Newtonsoft.Json.Serializatio

数据库查询自动导出发送工具

该工具可以根据执行文件中的SQL查询SQL Server数据库中的信息,并将结果自动保存为Excel 2007格式的文件,并立即发送给指定邮箱,省去等待查询结果的时间. using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.IO; using

查询expression的小工具

今天在研究flipsolve的时候无意间写了个shelf tool,用于查询一大推节点中某些parameter的expression中是否存在我需要的关键字.就是简单的对所框选的节点进行一个循序查询参数,最后用一个颜色标识出来.这个对研究某个大型封装的节点的参数帮助很大. ============ phrase = "../collision"nodes= hou.selectedNodes() for n in nodes: for p in n.parms(): try: expr

关于小工具对数据库进行分页查询

需求:关于第三方数据库的数据抽取,数据每2个小时会有增量数据. 要求:每天凌晨12:05对T-1日数据进行统一处理. 于是利用1周时间开发了个小工具,主要对接第三方oracle,pg,mysql数据库的数据. 采用技术: 1.多线程,线程池 2.jdbc,连接池 3.数据库分页 遇到问题 1.Javaswing页面设计难度大 解决方案:采用成熟的eclipse插件WindowBuilder 2.分页过程中,不断有新数据插入则会影响数据丢失或重复抽取 解决方案:order by或temp表 3.数

搬单查询小工具总结

搬单查询小工具总结 需求:页面输入团单号,从数据库中查询搬单错误的数据,以excel形式导出. 前端页面放在ts-settle-tools-web项目中,后端查询数据库的部分写在ts-tg-settle中,以API形式提供给ts-settle-tools使用,其实是通过webservice调用的. java public interface TSSettleService {     /**     * 查询搬单错误数据     * @param dealGroupIds     * @retu

【游戏开发】Excel表格批量转换成CSV的小工具

一.前言 在工作的过程中,我们有时可能会面临将Excel表格转换成CSV格式文件的需求.这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就论占用内存来说,同样的数据量Excel表格所占用的内存要远远大于CSV,因此将Excel转换成CSV势在必行.如果单单转换一个Excel表格还好,直接另存为就搞定的,但是如何将一个文件下的N个Execl表格转成CSV呢?今天马三就来和大家一起用Python撸一个Excel表格批量转换CSV的小工具—

原创SQlServer数据库生成简单的说明文档小工具(附源码)

这是一款简单的数据库文档生成工具,主要实现了SQlServer生成说明文档的小工具,目前不够完善,主要可以把数据库的表以及表的详细字段信息,导出到 Word中,可以方便开发人员了解数据库的信息或写技术说明文档. 技术上主要采用的 C#+Dapper+Npod ,开发工具为Vs2015,基于Net4.5框架. 实现思路: 1.首先获取数据库的字符串,测试链接是否成功, 2.通过脚本获取该服务器的数据库列表. 3.根据数据库找到该数据库的所有数据表 4.通过脚本找到该数据表所有的字段信息 5.使用N

用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。

最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量.<s:iterator>标签有一个value属性,用来存放在Action类的方法中存数据的list集合,还有一个id,好像是说指定集合的索引的意思,就是给list集合遍历出来的每个对象加上一个数字标签,反正我是这么理解的,没用过.还有一个很重要,就是var变量,我在s:iterator按ctr