使用pymysql库,将tushare股票信息保存入本地MySQL数据库
使用pymysql库,将tushare股票信息保存入本地MySQL数据库
1、前言
由于tushare存在积分权限限制,高频读取tushare数据容易挤占服务器带宽,因此对于常用的tushare数据,我们可以在第一次请求后,将DataFrame保存入我们本地的MySQL数据库,方便后续的使用。
2、具体步骤
导入所用库:
import tushare as ts
import pymysql
import numpy as np
构建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
新增DataFrame转为List的函数,方便后续数据入库:
def dataFrame_To_List(df):
dataset = np.array(df)
datalist = dataset.tolist()
return datalist
构建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()
操作实现:
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数据库的更多相关文章
- pymysql 使用twisted异步插入数据库:基于crawlspider爬取内容保存到本地mysql数据库
本文的前提是实现了整站内容的抓取,然后把抓取的内容保存到数据库. 可以参考另一篇已经实现整站抓取的文章:Scrapy 使用CrawlSpider整站抓取文章内容实现 本文也是基于这篇文章代码基础上实现 ...
- Scrapy Item用法示例(保存item到MySQL数据库,MongoDB数据库,使用官方组件下载图片)
需要学习的地方: 保存item到MySQL数据库,MongoDB数据库,下载图片 1.爬虫文件images.py # -*- coding: utf-8 -*- from scrapy import ...
- MySQL从删库到跑路(一)——MySQL数据库简介
作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.MySQL简介 1.MySQL简介 MySQL是一个轻量级关系型数据库管理系统,由瑞典MySQL AB公司开发, ...
- tushare获取的数据与mysql数据库交互简单范例
#!/usr/bin/python2.7# -*- coding: UTF-8 -*- import tushare as tsimport pandas as pdfrom sqlalchemy i ...
- MySQL从删库到跑路(四)——MySQL数据库创建实例
作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.创建数据库 1.创建数据库 创建数据库,指定数据库的默认字符集为utf8.create database sch ...
- springMVC保存数据到mysql数据库中文乱码问题解决方法
1.web.xml中添加过滤器 <filter> <filter-name>CharacterEncodingFilter</filter-name> <fi ...
- 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等
本文旨在通过爬取一系列博客网站技术文章的实践,介绍一下scrapy这个python语言中强大的整站爬虫框架的使用.各位童鞋可不要用来干坏事哦,这些技术博客平台也是为了让我们大家更方便的交流.学习.提高 ...
- (数据科学学习手札51)用pymysql来操控MySQL数据库
一.简介 pymysql是Python中专门用来操控MySQL数据库的模块,通过pymysql,可以编写简短的脚本来方便快捷地操控MySQL数据库,本文就将针对pymysql的基本功能进行介绍: 二. ...
- Python 使用PyMySql 库 连接MySql数据库时 查询中文遇到的乱码问题(实测可行) python 连接 MySql 中文乱码 pymysql库
最近所写的代码中需要用到python去连接MySql数据库,因为是用PyQt5来构建的GUI,原本打算使用PyQt5中的数据库连接方法,后来虽然能够正确连接上发现还是不能提交修改内容,最后在qq交流群 ...
- 使用第三方库连接MySql数据库:PyMysql库和Pandas库
使用PyMysql库和Pandas库链接Mysql 1 系统环境 系统版本:Win10 64位 Mysql版本: 8.0.15 MySQL Community Server - GPL pymysql ...
随机推荐
- Eclipse引用第三方jar包中中文注释为乱码问题
1.修改Eclipse中文本文件的默认编码:windows->Preferences->general->Workspace->Textfile encoding设置为UTF- ...
- MD5算法:高效安全的数据完整性保障
摘要:在数字世界中,确保数据完整性和安全性至关重要.消息摘要算法就是一种用于实现这一目标的常用技术.其中,Message Digest Algorithm 5(MD5)算法因其高效性和安全性而受到广泛 ...
- 15.6寸不到1kg!LG Gram超轻薄本发布:13代酷睿加持
出道就以轻薄为主要卖点的LG Gram系列笔记本产品,在今年CES 2023上也迎来更新. 隶属于全新LG Gram UltraSlim产品线的15.6寸新品(15Z90RT),机身重量仅998g,厚 ...
- Python Fire:自动生成命令行接口
命令行程序是平时写一些小工具时最常用的方式. 为了让命令行程序更加灵活,我们常常会设置一些参数,根据参数让程序执行不同的功能.这样就不用频繁的修改代码来执行不同的功能. 随着命令行程序功能的丰富,也就 ...
- Python中的UnboundLocalError是什么错误?如何解决?
在一个月黑风高的夜晚,我们满心欢喜地写出以下代码: money = 10000 # 当前的财产,单位为元 def add_money(value): money += value print('当 ...
- Oracle删除索引规范
1.背景概述 2.索引删除规范 3.根本解决方案及建议 1.背景概述 近期应用升级上线过程中,存在删除业务表索引的变更操作,且因删除索引导致次日业务高峰时期,数据库响应缓慢的情况,经定位是缺失索引导致 ...
- c语言实现内存池
概要 所谓内存池,顾名思义和线程池的设计原理是一样的,为了减少频繁申请释放内存而带来的资源消耗,减少释放内存后产生的内存碎片. 设计理念 为了方便管理内存池的设计通常是划分出一定数量的内存块,这些内存 ...
- 关于行结束符(CR、LF)、回车、换行
CR(Carriage Return)表示回车 LF(Line Feed)表示换行 Dos和Windows采用回车+换行(CR+LF)表示下一行而UNIX/Linux采用换行符(LF)表示下一行苹果机 ...
- Linux-查看文本中第m行到n行的内容
如何查看文件第6749行到6758行? 方式一:使用sed命令 不显示行号:sed -n 'M,Np' fileName 例如:sed -n '6749,6758p' hive-default.x ...
- JS leetcode 找到所有数组中消失的数字 题解分析
壹 ❀ 引 十天前做的一道题了,一直没整理,今天才花时间去读了官方题解思路,这道题也凸显出了算法思路的重要性,执行耗时差的真不是一点半点.题目来自448. 找到所有数组中消失的数字,题目描述如下: 给 ...