python将数据写入excel_【Python】将数据库中的数据查询出来自动写入excel文档
每天新增一个文档来汇总这个数据。这样搞了几天之后,过了一个周末,过来突然发现数据变多了很多,这个时候要调整策略,直接一个文档汇总出要的数据就可以了。
这样查了两天,我又嫌麻烦了,跟同事说了我的需求,问他能不能帮我用python搞成自动查结果然后把结果写到excel中的。他听完需求说这样是没有问题的。中午的时候他就把代码给我了。大概分这6部分:
01
—
链接数据库
import pandas as pd
import xlwings as xw
from sqlalchemy import create_engine
pd.set_option('display.float_format',lambda x : '%.4f' % x)#到小数点后两位,完整显示
def engine():
dbs=["yy_wr:DB@&0727Ydb..CN@192.168.1.165:5567/v2"]
engine=create_engine(
'mysql+pymysql://'+dbs[0],
echo=False,
pool_recycle=7200
)
print("成功链接数据库")
return engine
02
—
将数据库中的查询语句转译到python中
sql="""SELECT DATE_FORMAT(交易时间,'%d') 日期, 服务费,`商户服务费`,流量费,count(*),sum(交易金额) ,'非云闪付' 类别 from transaction_detail_202008 where `收单英文名称`='KQ_ZQ'
and `业务产品` like '%%99%%' and `服务类型` not like '%%云闪付%%'
GROUP BY 1,2,3,4 union all
SELECT DATE_FORMAT(交易时间,'%d') 日期, 服务费,`商户服务费`,流量费,count(*),sum(交易金额),'云闪付' 类别 from transaction_detail_202008 where `收单英文名称`='KQ_ZQ'
and `业务产品` like '%%99%%' and `服务类型` like '%%云闪付%%'
GROUP BY 1,2,3,4;"""
df=pd.read_sql(sql,con=engine())
【他给我的代码,在'%d'中的第一个百分号前还有个%,我这边查出来结果有问题,他那边是正常的,我删掉一个结果才符合预期】
03
—
打开指定的excel工作表新增工作表
app=xw.App()
df_data=app.books.open(r"E:\工作计划\周例会数据分享\2020.8.30\服务费收取数据源.xlsx")
df_data.sheets.add('newsource')
df_sheet=df_data.sheets('newsource')
04
—
将数据库中查询出的结果写入指定的excel区域
df_sheet.range("a1").value="每日交易数据"
df_sheet.range("a1:g1").api.merge
df_sheet.range("a2").value=list(df.columns)
for i in range(3,len(df)+3):
df_sheet.range("a"+str(i)).value=list(df.loc[i-3])
print("每日交易数据保存完成")
【merge函数后面的括号已删除,在同事那边没问题,在我这边报错NoneType,我删掉这个括号才算正常】
05
—
将查出的数据进行汇总处理【透视表】
pdf=df.pivot_table(values="sum(交易金额)",index="日期",columns="类别",aggfunc="sum")
b = pdf.T.agg('sum').T#右侧合计列
pdf['合计']=list(b)
a = pdf.agg('sum')#底部合计行
pdf.loc["合计"]=list(a)
pdf['云闪付占比']=(pdf['云闪付']/pdf['合计']).apply(lambda x:"%.2f%%" % (x * 100))
sever_amount=[]
sever_fee=[]
for i in range(len(pdf)):
sever_amount.append(df[(df['服务费']=='0.060%')&(df['日期']==pdf.index[i])].sum()['sum(交易金额)'])
sever_fee.append(df[(df['服务费']=='0.060%')&(df['日期']==pdf.index[i])].sum()['sum(交易金额)']*0.0006)
pdf['收取服务费交易金额']=sever_amount
pdf['收取服务费金额']=sever_fee
pdf['收取服务费交易金额占比']=(pdf['收取服务费交易金额']/pdf['合计']).apply(lambda x:"%.2f%%" % (x * 100))
pdf['收取服务费交易金额占非云闪付交易比例']=(pdf['收取服务费交易金额']/pdf['非云闪付']).apply(lambda x:"%.2f%%" % (x * 100))
df_sheet.range("i1").value="云闪付交易"
df_sheet.range("i1:m1").api.merge
df_sheet.range("n1").value="服务费与占比"
df_sheet.range("n1:q1").api.merge
df_sheet.range("i2").value=pdf
print('服务费与云闪付数据保存完成')
【这一部分的处理比较复杂,运用到透视表,还运营到条件求和】
06
—
保存&关闭文件,退出app,打印提示信息
df_data.save()#保存文件#文件如果是打开状态,不会报错 但更改不会起作用
df_data.close()#关闭文件关闭之后其他的才能操作#保存时会先检查是否已经存在,如果已经存在会有弹窗提醒
app.quit()
print("保存并关闭")
昨晚看了网易直播课的一堂课,用python去做量化投资。第一部分老师自我介绍【吹牛B】第二部分讲股票投资的一些指标计算方式第三部分用python和yahoofinance中的数据进行投资收益测算
感悟:了解了量化投资是个什么玩意:用算法和指标让程序去帮忙买入卖出。昨天的课程没有太复杂的算法,只需要用工具把一系列的数据算出来。只是根据设置的条件去买进卖出。这种投资有胜有负,昨天的BTC模拟数据是9胜10负,但是从年初到现在的收益率已经到了89%。
投资要克服人性中的贪婪。在投资中,下跌是必然【如同地心引力】,上涨需要集聚很多的能量。如果人在操作股票的时候能够死守规则,应该也不至于被割韭菜割得肉都割掉了。
python将数据写入excel_【Python】将数据库中的数据查询出来自动写入excel文档相关推荐
- geo数据差异分析_GEO2R:对GEO数据库中的数据进行差异分析
GEO数据库中的数据是公开的,很多的科研工作者会下载其中的数据自己去分析,其中差异表达分析是最常见的分析策略之一,为了方便大家更好的挖掘GEO中的数据,官网提供了一个工具GEO2R, 可以方便的进行差 ...
- oracle单表数据量上亿_MySQL数据库中,数据量越来越大,有什么具体的优化方案么?...
个人的观点,这种大表的优化,不一定上来就要分库分表,因为表一旦被拆分,开发.运维的复杂度会直线上升,而大多数公司和开发人员是欠缺这种能力的. 所以MySQL中几百万甚至小几千万的表,先考虑做单表的优化 ...
- mysql中如何大量删除数据_mysql如何批量删除数据库中的数据
我就废话不多说了,大家还是直接看代码吧~create or replace function aa1(a1 integer[],a2 bigint) returns void AS $$declare ...
- php在sql中添加数据,使用php在oracle数据库中插入数据
以下代码生成此代码 Warning: oci_execute() [function.oci-execute]: ORA-00911: invalid character in F:\wamp\www ...
- html中websocket获取数据,如何使用websocket从数据库中获取数据来刷新视图
在标准的Web交互中,客户端(即您的Web浏览器)向您的服务器发送请求.您的服务器收到请求,然后发送回您的浏览器中显示的信息,然后终止连接. WebSockets是一种在客户端和服务器之间创建持久,双 ...
- JS数据交互:动态从数据库中获取数据填充Select
JavaScript代码: $(document).ready(function () {getIntype(); });function getIntype(){$.ajax({type:" ...
- 如何将存储在MongoDB数据库中的数据导出到Excel中?
将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...
- solr mysql 导入命令_Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)
1 加入数据导入处理器的jar包 复制Solr解压后dist目录中的:solr-dataimporthandler-4.10.4.jar; 粘贴到contrib/dataimporthandler/l ...
- Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)
目录 1 加入数据导入处理器的jar包 2 加入数据库驱动包 3 配置solrconfig.xml文件 3.1 配置lib标签 - 加入驱动jar包 3.2 配置requestHandler标签 - ...
- python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档...
近期每天都要监控一个数据. 第一个版本是这样的: 每天新增一个文档来汇总这个数据.这样搞了几天之后,过了一个周末,过来突然发现数据变多了很多,这个时候要调整策略,直接一个文档汇总出要的数据就可以了. ...
最新文章
- Java实现算法导论中凸包问题Jarvis步进法
- MapObjects2自带例子的问题
- hadoop可以解决什么问题_快速解决皮带机轴磨损问题可以这样做
- es6 for...of 循环
- 感悟----程序员需要养成的习惯
- nodejs修改不重启服务器,nodejs连接数据库,数据库发生变化,怎样不用重启服务器更新网页内容?...
- 计算机记录乐器声音的文件是,一、用计算机录音的过程.pptx
- CAD导出.eps格式图
- MATLAB中范数norm()函数精讲
- html展开阅读全文代码,一个简单的html点击展开/关闭代码
- day2-requests和bs4
- 反垃圾邮件技术介绍和部署思路
- m4a转wav格式方法和步骤
- 1.2 电流和电压的参考方向
- math_基本初等函数图型(幂函数/指数/对数/三角/反三角)
- Eclipse(JavaEE)下载地址
- 自学软件测试1个半月上岸拿5个offer
- 批量修改文件夹下的文件后缀
- 为什么苹果允许「自助修 iPhone」这件事,与每个人息息相关?
- linux php gettext,在Ubuntu上无法获取gettext(php)工作