使用pymysql库,将tushare股票信息保存入本地MySQL数据库


1、前言

由于tushare存在积分权限限制,高频读取tushare数据容易挤占服务器带宽,因此对于常用的tushare数据,我们可以在第一次请求后,将DataFrame保存入我们本地的MySQL数据库,方便后续的使用。

2、具体步骤

  1. 导入所用库:

    import tushare as ts
    import pymysql
    import numpy as np
  2. 构建tushareMethod类,将所有涉及tushare数据请求的方法放入这个类中:

    class tushareMethod:
    pro = None def set_Token(self):
    ts.set_token('填入你自己的Token')
    self.pro = ts.pro_api() # 调用trade_cal接口,设置起始日期和终止日期
    def get_Trade_cal(self,start,end):
    df = self.pro.query('trade_cal', start_date=start, end_date=end, fields='cal_date,is_open,pretrade_date')
    return df
  3. 新增DataFrame转为List的函数,方便后续数据入库:

    def dataFrame_To_List(df):
    dataset = np.array(df)
    datalist = dataset.tolist()
    return datalist
  4. 构建mysqlMethod类,将所有mysql方法放入本类中:

    class mysqlMethod:
    db = None
    cursor = None def connect_To_Mysql(self, user_, password_, db_="mystockdatas"):
    # 打开数据库连接
    self.db = pymysql.connect(host='localhost', port=3306, user=user_, passwd=password_, db=db_ ,charset='utf8mb4')
    self.cursor = self.db.cursor() def insert_Datas(self,table,keys_list,values_list):
    suc_count = 0
    err_count = 0
    sql = "INSERT INTO {} ({}) VALUES (%s,%s,%s)".format(table, keys_list)
    for i in values_list:
    try:
    self.cursor.execute(sql,i)
    self.db.commit()
    suc_count += 1 except Exception as e:
    print("Error:{}".format(e))
    self.db.rollback()
    err_count += 1
    print("Finnish! Successed:{}, Failed:{}".format(suc_count,err_count)) def disconnect_to_Mysql(self):
    self.cursor.close()
    self.db.close()
  5. 操作实现:

    if __name__ == '__main__':
    
        # 实例化对象
    Obj_tushare = tushareMethod()
    Obj_mysql = mysqlMethod() # 设置Token
    Obj_tushare.set_Token() # 从tushare获取交易日数据
    df1 = Obj_tushare.get_Trade_cal("20160101","20180101") # 转换为list
    data = dataFrame_To_List(df1) # 连接数据库
    Obj_mysql.connect_To_Mysql("root","123456") # 新增数据
    Obj_mysql.insert_Datas("trade_cal", "cal_date,is_open,pretrade_date", data) # 断开数据库连接
    Obj_mysql.disconnect_to_Mysql()

3、整体代码

import tushare as ts
import pymysql
import numpy as np def dataFrame_To_List(df):
dataset = np.array(df)
datalist = dataset.tolist()
return datalist class tushareMethod:
pro = None def set_Token(self):
ts.set_token('你自己的Token')
self.pro = ts.pro_api() def get_Trade_cal(self,start,end): # 调用trade_cal接口,设置起始日期和终止日期
df = self.pro.query('trade_cal', start_date=start, end_date=end, fields='cal_date,is_open,pretrade_date')
return df class mysqlMethod:
db = None
cursor = None def connect_To_Mysql(self, user_, password_, db_="mystockdatas"):
# 打开数据库连接
self.db = pymysql.connect(host='localhost', port=3306, user=user_, passwd=password_, db=db_ ,charset='utf8mb4')
self.cursor = self.db.cursor() def insert_Datas(self,table,keys_list,values_list):
suc_count = 0
err_count = 0
sql = "INSERT INTO {} ({}) VALUES (%s,%s,%s)".format(table, keys_list)
for i in values_list:
try:
self.cursor.execute(sql,i)
self.db.commit()
suc_count += 1 except Exception as e:
print("Error:{}".format(e))
self.db.rollback()
err_count += 1
print("Finnish! Successed:{}, Failed:{}".format(suc_count,err_count)) def disconnect_to_Mysql(self):
self.cursor.close()
self.db.close() if __name__ == '__main__': # 实例化对象
Obj_tushare = tushareMethod()
Obj_mysql = mysqlMethod() # 设置Token
Obj_tushare.set_Token() # 从tushare获取交易日数据
df1 = Obj_tushare.get_Trade_cal("20160101","20180101") # 转换为list
data = dataFrame_To_List(df1) # 连接数据库
Obj_mysql.connect_To_Mysql("root","123456") # 新增数据
Obj_mysql.insert_Datas("trade_cal", "cal_date,is_open,pretrade_date", data) # 断开数据库连接
Obj_mysql.disconnect_to_Mysql()

4、运行结果

这里我请求的是2016-2018年的所有数据,返回的结果是366个数据成功入库,366个失败,原因是我数据库中原有2017-2018年的数据,这里主键PRIMARY已经存在,所以无法再次插入数据。

5、结语

本次我暂时的是将Tushare平台中的股票交易日期数据 保存入本地MySQL数据库,当然若要保存其他数据可以修改mysqlMethod类中的insert_Datas()方法相关的mysql命令即可。

使用pymysql库,将tushare股票信息保存入本地MySQL数据库的更多相关文章

  1. pymysql 使用twisted异步插入数据库:基于crawlspider爬取内容保存到本地mysql数据库

    本文的前提是实现了整站内容的抓取,然后把抓取的内容保存到数据库. 可以参考另一篇已经实现整站抓取的文章:Scrapy 使用CrawlSpider整站抓取文章内容实现 本文也是基于这篇文章代码基础上实现 ...

  2. Scrapy Item用法示例(保存item到MySQL数据库,MongoDB数据库,使用官方组件下载图片)

    需要学习的地方: 保存item到MySQL数据库,MongoDB数据库,下载图片 1.爬虫文件images.py # -*- coding: utf-8 -*- from scrapy import ...

  3. MySQL从删库到跑路(一)——MySQL数据库简介

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.MySQL简介 1.MySQL简介 MySQL是一个轻量级关系型数据库管理系统,由瑞典MySQL AB公司开发, ...

  4. tushare获取的数据与mysql数据库交互简单范例

    #!/usr/bin/python2.7# -*- coding: UTF-8 -*- import tushare as tsimport pandas as pdfrom sqlalchemy i ...

  5. MySQL从删库到跑路(四)——MySQL数据库创建实例

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.创建数据库 1.创建数据库 创建数据库,指定数据库的默认字符集为utf8.create database sch ...

  6. springMVC保存数据到mysql数据库中文乱码问题解决方法

    1.web.xml中添加过滤器 <filter> <filter-name>CharacterEncodingFilter</filter-name> <fi ...

  7. 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等

    本文旨在通过爬取一系列博客网站技术文章的实践,介绍一下scrapy这个python语言中强大的整站爬虫框架的使用.各位童鞋可不要用来干坏事哦,这些技术博客平台也是为了让我们大家更方便的交流.学习.提高 ...

  8. (数据科学学习手札51)用pymysql来操控MySQL数据库

    一.简介 pymysql是Python中专门用来操控MySQL数据库的模块,通过pymysql,可以编写简短的脚本来方便快捷地操控MySQL数据库,本文就将针对pymysql的基本功能进行介绍: 二. ...

  9. Python 使用PyMySql 库 连接MySql数据库时 查询中文遇到的乱码问题(实测可行) python 连接 MySql 中文乱码 pymysql库

    最近所写的代码中需要用到python去连接MySql数据库,因为是用PyQt5来构建的GUI,原本打算使用PyQt5中的数据库连接方法,后来虽然能够正确连接上发现还是不能提交修改内容,最后在qq交流群 ...

  10. 使用第三方库连接MySql数据库:PyMysql库和Pandas库

    使用PyMysql库和Pandas库链接Mysql 1 系统环境 系统版本:Win10 64位 Mysql版本: 8.0.15 MySQL Community Server - GPL pymysql ...

随机推荐

  1. STM32CubeMX教程30 USB_DEVICE - MSC外设_读卡器

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 ...

  2. 网友感到担忧!iOS 17支持第三方应用商店:这下跟安卓没区别了

    苹果此前官宣将于6月6日召开WWDC2023大会,按照往年的惯例,在这次大会上将会推出下一代iOS系统,也就是iOS 17.最近国外有关iOS 17的爆料中提到,迫于欧盟法案压力,iOS 17或将支持 ...

  3. 小知识:如何修改TFA下的OSW数据保留时间

    在Oracle社区可以搜索到这样的问题: How to change oswatcher retention when running under TFA 但很遗憾该问题目前也没有给出确切答复. 其实 ...

  4. 使用JS保存数据

    1 保存到text中 demo1.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

  5. 【Unity3D】相机

    1 简介 ​ 相机用于渲染游戏对象,每个场景中可以有多个相机,每个相机独立成像,每个成像都是一个图层,最后渲染的图层在最前面显示. ​ 相机的属性面板如下: Clear Flags:设置清屏颜色,Sk ...

  6. Java设计模式-观察者模式Observer

    介绍 观察者模式是行为设计模式之一.当您对对象的状态感兴趣并希望在任何更改时得到通知时,观察者设计模式非常有用.在观察者模式中,观察另一个对象状态的对象被称为观察者,而被观察的对象则被称为主体. 优点 ...

  7. 溯源反制-Mysql蜜罐

    东西比较老,类似的文章网上已经很多,原理主要是通过服务端的load data动作可以主动向客户端获取文件. 看过hfish等自带的mysql蜜罐读取/etc/passwd,感觉还差点实用性.这次文章主 ...

  8. 我的小程序之旅七:微信公众号设置IP白名单

    一.为什么要配置IP白名单 此处IP为服务器对公网IP: 在IP白名单内的IP地址作为来源,获取access_token接口才可调用成功. 而想要调用公众号相关API,就必须获取access_toke ...

  9. 优雅使用前端枚举Enum,符合国标的那种!

    01.什么是枚举Enum? 枚举Enum是在多种语言中都有的一种数据类型,用于表示一组特定相关的常量数据集合,如性别(男.女).数据状态(可用.禁用).垂直对齐(顶端.居中.底部).星期等.特点是数据 ...

  10. python中partial用法

    应用 典型的,函数在执行时,要带上所有必要的参数进行调用.然后,有时参数可以在函数被调用之前提前获知.这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用. 示例pyqt5 ...