当前位置:首页>编程日记>正文

python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档...

近期每天都要监控一个数据。

第一个版本是这样的:

每天新增一个文档来汇总这个数据。这样搞了几天之后,过了一个周末,过来突然发现数据变多了很多,这个时候要调整策略,直接一个文档汇总出要的数据就可以了。

python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档... 配图01

这样查了两天,我又嫌麻烦了,跟同事说了我的需求,问他能不能帮我用python搞成自动查结果然后把结果写到excel中的。他听完需求说这样是没有问题的。中午的时候他就把代码给我了。

大概分这6部分:

python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档... 配图02

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

python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档... 配图03

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'中的第一个百分号前还有个%,我这边查出来结果有问题,他那边是正常的,我删掉一个结果才符合预期】

python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档... 配图04

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')

python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档... 配图05

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,我删掉这个括号才算正常】

python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档... 配图06

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('服务费与云闪付数据保存完成')

【这一部分的处理比较复杂,运用到透视表,还运营到条件求和】

python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档... 配图07

06

保存&关闭文件,退出app,打印提示信息

df_data.save()#保存文件#文件如果是打开状态,不会报错   但更改不会起作用

df_data.close()#关闭文件关闭之后其他的才能操作#保存时会先检查是否已经存在,如果已经存在会有弹窗提醒

app.quit()

print("保存并关闭")

python查数据库写入excel_【Python】将数据库中的数据查询出来自动写入excel文档... 配图08

昨晚看了网易直播课的一堂课,用python去做量化投资。

第一部分老师自我介绍【吹牛B】

第二部分讲股票投资的一些指标计算方式

第三部分用python和yahoofinance中的数据进行投资收益测算

感悟:

了解了量化投资是个什么玩意:用算法和指标让程序去帮忙买入卖出。

昨天的课程没有太复杂的算法,只需要用工具把一系列的数据算出来。只是根据设置的条件去买进卖出。

这种投资有胜有负,昨天的BTC模拟数据是9胜10负,但是从年初到现在的收益率已经到了89%。

投资要克服人性中的贪婪。

在投资中,下跌是必然【如同地心引力】,上涨需要集聚很多的能量。如果人在操作股票的时候能够死守规则,应该也不至于被割韭菜割得肉都割掉了。


http://www.coolblog.cn/news/33b72c4d890eadeb.html

相关文章:

  • asp多表查询并显示_SpringBoot系列(五):SpringBoot整合Mybatis实现多表关联查询
  • s7day2学习记录
  • 【求锤得锤的故事】Redis锁从面试连环炮聊到神仙打架。
  • 矿Spring入门Demo
  • 拼音怎么写_老师:不会写的字用圈代替,看到孩子试卷,网友:人才
  • Linux 实时流量监测(iptraf中文图解)
  • Win10 + Python + GPU版MXNet + VS2015 + RTools + R配置
  • 美颜
  • shell访问php文件夹,Shell获取某目录下所有文件夹的名称
  • 如何优雅的实现 Spring Boot 接口参数加密解密?
  • LeCun亲授的深度学习入门课:从飞行器的发明到卷积神经网络
  • Mac原生Terminal快速登录ssh
  • java受保护的数据与_Javascript类定义语法,私有成员、受保护成员、静态成员等介绍...
  • mysql commit 机制_1024MySQL事物提交机制
  • 支撑微博千亿调用的轻量级RPC框架:Motan
  • jquery 使用小技巧
  • 2019-9
  • 法拉利虚拟学院2010 服务器,法拉利虚拟学院2010
  • vscode pylint 错误_将实际未错误的py库添加到pylint白名单
  • 科学计算工具NumPy(3):ndarray的元素处理
  • 工程师在工作电脑存 64G 不雅文件,被公司开除后索赔 41 万,结果…
  • linux批量创建用户和密码
  • newinsets用法java_Java XYPlot.setInsets方法代碼示例
  • js常用阻止冒泡事件
  • 气泡图在开源监控工具中的应用效果
  • 各类型土地利用图例_划重点!国土空间总体规划——土地利用
  • php 启动服务器监听
  • dubbo简单示例
  • 【设计模式】 模式PK:策略模式VS状态模式
  • [iptables]Redhat 7.2下使用iptables实现NAT
  • Ubuntu13.10:[3]如何开启SSH SERVER服务
  • CSS小技巧——CSS滚动条美化
  • JS实现-页面数据无限加载
  • 阿里巴巴分布式服务框架 Dubbo
  • 最新DOS大全
  • Django View(视图系统)
  • 阿里大鱼.net core 发送短信
  • 程序员入错行怎么办?
  • 两张超级大表join优化
  • 第九天函数
  • Linux软件安装-----apache安装
  • HDU 5988 最小费用流
  • Sorenson Capital:值得投资的 5 种 AI 技术
  • 《看透springmvc源码分析与实践》读书笔记一
  • 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
  • Arm芯片的新革命在缓缓上演
  • nagios自写插件—check_file
  • python3 错误 Max retries exceeded with url 解决方法
  • 行为模式之Template Method模式
  • 通过Spark进行ALS离线和Stream实时推荐