近期每天都要监控一个数据。第一个版本是这样的:

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

这样查了两天,我又嫌麻烦了,跟同事说了我的需求,问他能不能帮我用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文档相关推荐

  1. geo数据差异分析_GEO2R:对GEO数据库中的数据进行差异分析

    GEO数据库中的数据是公开的,很多的科研工作者会下载其中的数据自己去分析,其中差异表达分析是最常见的分析策略之一,为了方便大家更好的挖掘GEO中的数据,官网提供了一个工具GEO2R, 可以方便的进行差 ...

  2. oracle单表数据量上亿_MySQL数据库中,数据量越来越大,有什么具体的优化方案么?...

    个人的观点,这种大表的优化,不一定上来就要分库分表,因为表一旦被拆分,开发.运维的复杂度会直线上升,而大多数公司和开发人员是欠缺这种能力的. 所以MySQL中几百万甚至小几千万的表,先考虑做单表的优化 ...

  3. mysql中如何大量删除数据_mysql如何批量删除数据库中的数据

    我就废话不多说了,大家还是直接看代码吧~create or replace function aa1(a1 integer[],a2 bigint) returns void AS $$declare ...

  4. php在sql中添加数据,使用php在oracle数据库中插入数据

    以下代码生成此代码 Warning: oci_execute() [function.oci-execute]: ORA-00911: invalid character in F:\wamp\www ...

  5. html中websocket获取数据,如何使用websocket从数据库中获取数据来刷新视图

    在标准的Web交互中,客户端(即您的Web浏览器)向您的服务器发送请求.您的服务器收到请求,然后发送回您的浏览器中显示的信息,然后终止连接. WebSockets是一种在客户端和服务器之间创建持久,双 ...

  6. JS数据交互:动态从数据库中获取数据填充Select

    JavaScript代码: $(document).ready(function () {getIntype(); });function getIntype(){$.ajax({type:" ...

  7. 如何将存储在MongoDB数据库中的数据导出到Excel中?

    将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...

  8. solr mysql 导入命令_Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)

    1 加入数据导入处理器的jar包 复制Solr解压后dist目录中的:solr-dataimporthandler-4.10.4.jar; 粘贴到contrib/dataimporthandler/l ...

  9. Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)

    目录 1 加入数据导入处理器的jar包 2 加入数据库驱动包 3 配置solrconfig.xml文件 3.1 配置lib标签 - 加入驱动jar包 3.2 配置requestHandler标签 - ...

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

    近期每天都要监控一个数据. 第一个版本是这样的: 每天新增一个文档来汇总这个数据.这样搞了几天之后,过了一个周末,过来突然发现数据变多了很多,这个时候要调整策略,直接一个文档汇总出要的数据就可以了. ...

最新文章

  1. Java实现算法导论中凸包问题Jarvis步进法
  2. MapObjects2自带例子的问题
  3. hadoop可以解决什么问题_快速解决皮带机轴磨损问题可以这样做
  4. es6 for...of 循环
  5. 感悟----程序员需要养成的习惯
  6. nodejs修改不重启服务器,nodejs连接数据库,数据库发生变化,怎样不用重启服务器更新网页内容?...
  7. 计算机记录乐器声音的文件是,一、用计算机录音的过程.pptx
  8. CAD导出.eps格式图
  9. MATLAB中范数norm()函数精讲
  10. html展开阅读全文代码,一个简单的html点击展开/关闭代码
  11. day2-requests和bs4
  12. 反垃圾邮件技术介绍和部署思路
  13. m4a转wav格式方法和步骤
  14. 1.2 电流和电压的参考方向
  15. math_基本初等函数图型(幂函数/指数/对数/三角/反三角)
  16. Eclipse(JavaEE)下载地址
  17. 自学软件测试1个半月上岸拿5个offer
  18. 批量修改文件夹下的文件后缀
  19. 为什么苹果允许「自助修 iPhone」这件事,与每个人息息相关?
  20. linux php gettext,在Ubuntu上无法获取gettext(php)工作

热门文章

  1. python无所不能_python-列表
  2. java查询数据库的方式_Java连接各种数据库方式速查表
  3. C++ 重载强制类型转换运算符
  4. Jsoup从一个文件加载一个文档
  5. 计算机设计大赛国奖作品_3. 需求分析
  6. TensorFlow11CNN和全卷积神经网络
  7. python logging模块学习
  8. IndexError: list index out of range--Python报错原因及解决办法
  9. Median(二分+二分)
  10. MySQL数据库编译过程