sql date就是名称_Python与SQL交互

小知识:python 与 sql 交互

来都来了,不关注下吗?~~

    hello大家好,今天给大家科普一个比较常用的获取数据技能5771a866655e2b72fe1cd706839be81b.png

    不知道你在工作或者学习中有没有这样的情况,经常需要手动跟踪且更新一些数据a928e89c3ec9e5be890f4bb8b3dc8eaf.png,举个粒子。

    比如每周都要更新某些基金的业绩。如果是一只还好,手动导出就好,但是如果是100个呢?尤其是当100个还要合在一个表中....6b2cebcb54af76bec8b846256f50663c.png6b2cebcb54af76bec8b846256f50663c.png 

394e771c9d6dc255e8f09009e5a7c620.png

   又或者是让你先在基金中识别出哪些是“量化基金”,然后获取这些基金的数据。怎么破?83f24b353b80d881a37f413a9eeb8294.png 当然了这个稍微有点难,那我们可能需要先爬虫去识别哪些基金是量化基金(基金简介里面出现“量化投资团队”等关键字眼初步认为是量化基金),再去导出。今天在这里我们只先说第一种情况。

    这些数据当然是从网上可以爬下来的,但是如果不用爬虫可以解决问题,我们就不爬虫,因为爬虫比较复杂,可能需要对前端的知识也有要求,那么我们首选API。今天介绍一下我们怎么去从数据库导出数据,未来会加一些怎么简单粗暴的直接从网页抓取想要的数据~~930b8f5b8ca31e7a46a39c4e38a09d4d.png

    API的话就需要拿到这个数据库接口的账号和密码,然后从数据库用mysql直接导出到python进行处理,最后保存到excel文件,如果有特殊要求时还可以按要求合并到一个excel中5441e0e55a877dc3d307cd2f25838631.png

    那么就拿导出基金的例子来说,比如我想导出五个产品历年来的业绩净值、基金名称和日期,并且按指数的date合到一个excel表中。

    首先把这些产品名称写进list里面,一定要注意和database里一字不差,必须准确,核对核对!然后从db里面导出我们想要的字段,比如fund_name, price_date, cumulative_nav_withdrawal,这个也是db里面的字段名称,然后看它们分布在哪些table中,必要的时候要用到类似excel里面的vlookup这样的功能,就是把表和表合并,组成一个完整的table。

      (ps: 如果基础不好建议补一下sql,很简单的!)

lst = [ "白鹭桃花岛量化对冲一号","衍盛量化精选一期", "念空安皓多策略", "因诺启航1号",       "微丰凯旋9号" ]sql = '''SELECT fund_name, price_date, cumulative_nav_withdrawalFROM table1 INNER JOIN table2    ON table.fund_id = table.fund_id   WHERE %sORDER BY price_date   ''' % " or ".join(["fund_name='"+i+"'" for i in lst ])index_code = "ZYCTAB"

导入要用的包:

import pymysqlimport pandas as pd

host, user, passwd, db, port 都是要根据API去填。

def to_excel(lst, index_code,sql,file_name):    # 连接基金的API    conn = pymysql.connect(host='XXX', user='XXX', passwd='XXX', db='XXX',port=XX,charset='utf8')    data_sql = pd.read_sql(sql, conn)    data_sql["price_date"] = pd.to_datetime(data_sql["price_date"])    conn.close()    # 连接指数的API    conn = pymysql.connect(host='XXX', user='XXX', passwd='XXX', db="XXX", port=XX,charset='utf8')    data_index = pd.read_sql("SELECT index_name,statistic_date from table WHERE index_code ='" + index_code + "'", conn)    data_index["price_date"] = pd.to_datetime(data_index["price_date"])    conn.close()    # 创建一个空的excel文件    pd.DataFrame().to_excel(file_name)    # 打开excel    writer = pd.ExcelWriter(file_name)    # 写入指数    merge_data = data_index.copy()        # sheets是要写入的excel工作簿名称列表    for sheet in lst:        data_sheet = data_sql[data_sql["fund_short_name"]==sheet]        data_sheet = data_sheet.rename(columns={"cumulative_nav_withdrawal": sheet})        merge_data = merge_data.merge(data_sheet[[sheet, "price_date"]], on="price_date", how="outer")        data_sheet.to_excel(writer, sheet_name=sheet, index=False)    merge_data.to_excel(writer, sheet_name="汇总表", index=False)    # 保存writer中的数据至excel    writer.save()    if __name__ == "__main__":    to_excel(lst, index_code, sql,"output.xlsx")

这样就完成了,导出结果是一个excel,多个sheet,请看:

单个:

7bbcd23f6935a903bfa99ce4b06d2433.png

汇总表:

2ad1dcfb39c454964f5f41c012c9da0f.png

    是不是瞬间工作效率倍增!50ea727e4a9cfc11f9016878b9b7b1a0.png50ea727e4a9cfc11f9016878b9b7b1a0.png 

    当然了,代码还要根据具体场景具体改,但是基本的都在这里啦~~7dea412ba638a411695f37ca100ed6a3.png希望可以帮到你哦! (交互那部分代码可以直接copy哦5441e0e55a877dc3d307cd2f25838631.png)

今天看到一句话,也送给大家:

再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。

记得关注喵~~

ea6d2ae0ee0e4bd39aeb9c698e75a554.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值