使用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. Eclipse引用第三方jar包中中文注释为乱码问题

    1.修改Eclipse中文本文件的默认编码:windows->Preferences->general->Workspace->Textfile encoding设置为UTF- ...

  2. MD5算法:高效安全的数据完整性保障

    摘要:在数字世界中,确保数据完整性和安全性至关重要.消息摘要算法就是一种用于实现这一目标的常用技术.其中,Message Digest Algorithm 5(MD5)算法因其高效性和安全性而受到广泛 ...

  3. 15.6寸不到1kg!LG Gram超轻薄本发布:13代酷睿加持

    出道就以轻薄为主要卖点的LG Gram系列笔记本产品,在今年CES 2023上也迎来更新. 隶属于全新LG Gram UltraSlim产品线的15.6寸新品(15Z90RT),机身重量仅998g,厚 ...

  4. Python Fire:自动生成命令行接口

    命令行程序是平时写一些小工具时最常用的方式. 为了让命令行程序更加灵活,我们常常会设置一些参数,根据参数让程序执行不同的功能.这样就不用频繁的修改代码来执行不同的功能. 随着命令行程序功能的丰富,也就 ...

  5. Python中的UnboundLocalError是什么错误?如何解决?

      在一个月黑风高的夜晚,我们满心欢喜地写出以下代码: money = 10000 # 当前的财产,单位为元 def add_money(value): money += value print('当 ...

  6. Oracle删除索引规范

    1.背景概述 2.索引删除规范 3.根本解决方案及建议 1.背景概述 近期应用升级上线过程中,存在删除业务表索引的变更操作,且因删除索引导致次日业务高峰时期,数据库响应缓慢的情况,经定位是缺失索引导致 ...

  7. c语言实现内存池

    概要 所谓内存池,顾名思义和线程池的设计原理是一样的,为了减少频繁申请释放内存而带来的资源消耗,减少释放内存后产生的内存碎片. 设计理念 为了方便管理内存池的设计通常是划分出一定数量的内存块,这些内存 ...

  8. 关于行结束符(CR、LF)、回车、换行

    CR(Carriage Return)表示回车 LF(Line Feed)表示换行 Dos和Windows采用回车+换行(CR+LF)表示下一行而UNIX/Linux采用换行符(LF)表示下一行苹果机 ...

  9. Linux-查看文本中第m行到n行的内容

    如何查看文件第6749行到6758行? 方式一:使用sed命令 不显示行号:sed -n 'M,Np'  fileName 例如:sed -n '6749,6758p'  hive-default.x ...

  10. JS leetcode 找到所有数组中消失的数字 题解分析

    壹 ❀ 引 十天前做的一道题了,一直没整理,今天才花时间去读了官方题解思路,这道题也凸显出了算法思路的重要性,执行耗时差的真不是一点半点.题目来自448. 找到所有数组中消失的数字,题目描述如下: 给 ...