python 连接数据库,查询结果写入数据到excel
使用Python链接数据库查询数据,并将查询结果写入到Excel中,实现方法上主要有两步,第一,查数据,第二,写Excel。
一、导入需要的包
import time
import xlwt
from commontool import dbtool
import os
二、查数据,并返回查询结果
查询数据传入指定日期,使用指定日期在数据库中查询该日期区间的交易。因为传入的日期为字符串,第一步需要将传入的字符串转换成时间数组,第二步再将传入的日期转换成自己想要的时间格式。
class writefile:
file = r"F:\python\PycharmProjects\pythonpractice\fileshandle\Files"
def querydata(self,date):
"""查询数据库结果"""
self.date = date
datestruct = time.strptime(self.date,"%Y%m%d") # 将字符串转换成时间数组
date = time.strftime("%Y-%m-%d",datestruct) # 将时间转换成其他格式
starttime = date + ' 00:00:00'
endtime = date + ' 23:59:59'
db = dbtool.db()
orderquery = "select merchantid,payorderid,state,paytime,innerbank from ordersummary where paytime between '%s' and '%s' ; " %(starttime,endtime)
res = db.dbquery(db.dbconnect()[3],orderquery).fetchall()
return res
三、将查询结果写入到Excel
将查询结果写入到Excel,这里使用的是xlwt模块,首先要做的是:创建一个Excel,再创建一个sheet页,需要表头的话,也需要写一个表头。表头的格式是一个列表。
这里需要注意的是:
(1)range函数是不包含stop数的,所以这里要写入查询的全部数据的话,需要给len(res)+1。比如:查询结果有5个,range(1,4)时,只能是1,2,3,4,就会漏掉5,所以需要给查询结果加上一个1。
(2)row = 1代表Excel的第二行(第一行是表头),那么在第二行要写入查询的数据的话,应该写入查询数据的第一行,所以 sheet.write(row,col,res[row-1][col]) 中使用了row-1。
def write_excel(self,res):
"""操作Excel"""
book = xlwt.Workbook() # 新建一个Excel
sheet = book.add_sheet('导出数据') # 创建sheet
title = ['商户号','流水号','交易状态','交易时间','交易渠道'] # 写表头 # 循环将表头写入到sheet页
i=0
for header in title:
sheet.write(0,i,header)
i+=1 # 写数据
for row in range(1,len(res)+1):
for col in range(0,len(res[row-1])):
sheet.write(row,col,res[row-1][col])
col+=1
row+=1
book.save(self.file+"\交易导出.xls")
print("导出成功")
四、判断生成Excel是否重复
文件生成是在一个路径下,要重复生成需要判断该路径下是否存在该文件,如果存在,则删除,或者重命名,再或者移动到备份路径下,这里使用的是重复就删除。
删除文件这里使用到了os模块。
def judge_file_exist(self):
if os.path.exists(self.file+"\交易导出.xls"):
os.remove(self.file+"\交易导出.xls")
五、主要流程就是以上几步,现在需要主函数将其串起来。
先判断文件是否存在,然后在调用写文件方法。
def writefile(self):
date = ''
self.judge_file_exist()
self.write_excel(self.querydata(date))
python 连接数据库,查询结果写入数据到excel的更多相关文章
- Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文件,写入新数据
背景 Python中,想要打开已经存在的excel的xls文件,然后在最后新的一行的数据. 折腾过程 1.找到了参考资料: writing to existing workbook using xlw ...
- Python中生成(写入数据到)Excel文件
转自http://www.crifan.com/export_data_to_excel_file_in_python/ 在Python中,如何将数据,导出为Excel,即把数据写入到新生成的ex ...
- Python常见问题 - 写入数据到 excel 报 ValueError: invalid literal for int() with base 10 错误
背景 在上写入数据到excel中,报了以下错误 出现原因 对于写入excel场景下出现该错误的话,很大概率是写入数据的单元格原本的数据格式有问题 解决方法 清理掉单元格的旧数据,然后再写入就可以了
- [ES]Python查询ES导出数据为Excel
版本 elasticsearch==5.5.0 python==3.7 说明 用python查询es上存储的状态数据,将查询到的数据用pandas处理成excel code # -*- coding: ...
- 使用python脚本从数据库导出数据到excel
python从数据库导出数据到excel 最近需要从数据库里导出一些数据到excel,刚开始我是使用下面的命令 select * from xxx where xxx into outfile 'xx ...
- 利用python将mysql中的数据导入excel
Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 如下分别利用xlwt和openpyxl将mysql数据库中查询的数据保存到exce ...
- NPOI操作excel之写入数据到excel表
在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...
- python连接数据库--查询数据
#!/usr/bin/python # -*- coding: utf-8 -*- import pymysql def fileDB(): # 打开数据库连接(ip/数据库用户名/登录密码/数据库名 ...
- python 使用openpyxl来写数据到excel表格
使用openpyxl写execl确实很方便.我先介绍用到的相关模块与函数 Workbook:工作簿模块,在内存创建一个工作簿. ExcelWriter:使用它向exel中写数据. get_column ...
随机推荐
- InfluxDB因修改默认数据目录导致服务无法正常运行的问题(权限问题)
在实际的生产中,考虑的实际情况,我们会调整一些默认配置,例如,数据目录.InfluxDB修改默认的Data目录后,因权限问题,服务无法正常运行.以下是具体的分析测试过程. 配置文件为 /etc/inf ...
- 动态构建Lambda表达式实现EF动态查询
在使用Entity Framework做数据查询的时候,查询条件往往不是固定的,需要动态查询.可以通过动态构建Lamda表达式来实现动态查询. Lamda表达式 使用Lamda表达式可以很方便的按条件 ...
- 【tf.keras】Resource exhausted: OOM when allocating tensor with shape [9216,4096] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
运行以下类似代码: while True: inputs, outputs = get_AlexNet() model = tf.keras.Model(inputs=inputs, outputs= ...
- 原型链 | 显示原型、隐式原型 | 构造关系constructor | instanceof
1.原型关系 prototype 显式原型:prototype 隐式原型:__proto__ 1. 每个函数function都有一个prototype,即显式原型(属性)2. 每个实例对象都有一个__ ...
- 分享一下今天遇到的两个问题,一个是关于C语言内存泄漏问题,另一个是关于Linux下grep使用时的问题
C语言内存泄漏问题: 给出如下代码: #include <stdio.h> #include <stdlib.h> int main(){ int *p; p=(int*)ma ...
- sqoop的详细使用及原理
转自:https://blog.csdn.net/zhusiqing6/article/details/95680185 1.sqoop简介sqoop是一个用来将hadoop中hdfs和关系型数据库中 ...
- 17-REST framework-Request与Response
1.Django REST framework提供的视图的主要作用 1.控制序列化器的执行(检验,保存,转换数据) 2.控制数据库查询的执行 Request与Response 1.Request RE ...
- vue 渐变 进度条 progress
废话 不多少说 ,直接上代码 新建文件 gradual-progress.vue <!-- * @Author: gfc * @Date: 2019-11-07 14:00:11 * @Last ...
- 黄聪:table自适应宽度和高度
自适应宽度: td { width: 1px; white-space: nowrap; /* 自适应宽度*/ word-break: keep-all; /* 避免长单词截断,保持全部 */ } 自 ...
- 【BZOJ4823】[CQOI2017]老C的方块(网络流)
[BZOJ4823][CQOI2017]老C的方块(网络流) 题面 BZOJ 题解 首先还是给棋盘进行黑白染色,然后对于特殊边左右两侧的格子单独拎出来考虑. 为了和其他格子区分,我们把两侧的这两个格子 ...