使用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. Redis订阅模式在生产环境引起的内存泄漏

    内存泄漏 内存泄漏指的就是在运行过程中定义的各种各样的变量无法被垃圾回收器正常标记为不可达并触发后续的回收流程,主要原因还是因为对可回收对象引用没有去除,导致垃圾回收器通过GC ROOT可达性分析时认 ...

  2. SpringCloud-03-Nacos配置管理

    Nacos配置管理 原理图: 1.统一配置管理 ① 在Nacos中添加配置信息 ② 在弹出表单中填写配置信息 ③ 配置获取的步骤*(原理) ④ 引入Nacos的配置管理客户端依赖 <!--nac ...

  3. AnyCAD程序无法启动的问题解决方法

    在某些电脑上会出现基于AnyCAD开发的程序无法启动的问题,如: System-ArgumentEcception: Please check the dependendes 解决方法 安装最新的VS ...

  4. AutoGPT是什么?超简单安装使用教程

    1.AutoGPT 最近几天当红炸子鸡的是AutoGPT,不得不说AI发展真快啊,几天出来一个新东西,都跟不上时代的脚步了. AutoGPT是一个开源的应用程序,展示了GPT-4语言模型的能力.这个程 ...

  5. 【实用小技巧】RSA非对称加解密及XML&PEM格式互换方案

    ​ 最近因考虑接口安全问题,有实现给WEB API实现统一的参数鉴权功能,以防止请求参数被篡改或重复执行,参数鉴权方法基本与常见的鉴权思路相同,采用(timestamp+sign),而我为了防止tim ...

  6. 阿里二面:SpringBoot可以同时处理多少个请求?当场懵了。。。。

    SpringBoot以其简洁高效的开发方式和强大的内嵌容器特性,为开发者提供了构建高性能后端服务的便利.然而,当面临高并发场景时,理解并合理配置Spring Boot应用以达到最佳的并发处理能力至关重 ...

  7. Java线上代码热修复的一些积累

    工具:Arthas 参考文章: https://blog.csdn.net/Admire_an/article/details/99768393 https://www.cnkirito.moe/ar ...

  8. CentOS在无网络环境下,用离线源yum安装软件

    先说大致步骤: 1.前提假设:当前无网络的目标服务器是A,我们需要先准备一台服务器B: 2.在B上面用yum先把软件安装完成. 3.然后用createrepo将B中的包拷贝出来,并传到A上(用U盘或者 ...

  9. c++STL用法总结

    一.vector的用法 vector<int> vet; 1.排序:sort(vet.begin(), vet.end()), 时间复杂度O(nlogn) 2.查找:if(find(vet ...

  10. 溯源反制-Mysql蜜罐

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