这一篇用来讲述如何将从接口获得的dataframe结构的数据保存到mysql。
安装mysql使用的是brew,这个之前已经安装过了,不细讲,大家可以到网上寻找安装的教程。
有个注意点就是建议大家要指定版本安装,最新的mysql现在支持还没有完全跟上,会比较麻烦。
我的mysql版本是5.7,大家可以参考。
然后我们要安装sqlalchemy。
>> pip install sqlalchemy
这个安装时间略有点长,大家尽量不要打断它,失败之后可以重试。
将数据保存到数据库,使用的是 to_sql 函数。
常用的参数是:
name 表名
conn 数据库链接
if_exists 表如果存在采用哪种逻辑,{'fail','append','replace'},默认是fail(请注意这里是说表存在,而不是数据存在)
flavor 数据库类型,如果使用create_engine则可不填
chunksize 分成多少次存入数据库,默认是None,即一次性存入
我在数据库里创建了一个database,名字叫stock
create database stock;
然后使用sqlalchemy来创建数据库连接:
from sqlalchemy import create_engine
engine = create_engine('mysql://user:[email protected]/stock?charset=utf8')
data.to_sql('stock_basic', engine) #运行to_sql
运行,运行成功。
检查了下数据库,发现stock_basic表已经创建,数据已经插入,共有3571。
查看表设计,发现所有字段类型都是text,这太浪费空间了,进行了修改,修改之后的建表sql如下:
CREATE TABLE `stock_basic` (
`index` int(11) DEFAULT NULL,
`ts_code` varchar(12) DEFAULT NULL,
`symbol` varchar(10) DEFAULT NULL,
`name` varchar(10) DEFAULT NULL,
`area` varchar(10) DEFAULT NULL,
`industry` varchar(50) DEFAULT NULL,
`market` varchar(10) DEFAULT NULL,
`exchange` varchar(10) DEFAULT NULL,
`curr_type` varchar(10) DEFAULT NULL,
`list_status` varchar(5) DEFAULT NULL,
`list_date` varchar(10) DEFAULT NULL,
`delist_date` varchar(20) DEFAULT NULL,
`is_hs` varchar(5) DEFAULT NULL,
KEY `ix_stock_basic_index` (`index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这张表数据在一万以内,不考虑其他字段加索引。
考虑到这些数据有时候会发生变化,所以每次启动时,将表里的数据清除,重新导入。
修改代码如下:
#coding=utf-8
import tushare
from common import db
from sqlalchemy import create_engine
tushare.set_token('your token')
pro = tushare.pro_api()
data = ''
try:
data = pro.stock_basic(fields='ts_code,symbol,name,area,industry,list_date,market,is_hs,list_status,exchange,delist_date,curr_type')
except Exception, e: #py 2.7 写法, py 3写法是 Exception as e
print e
exit(0)
stock_conn = db.db.get_stock_conn() #创建conn
stock_cursor = stock_conn.cursor() #获取游标
stock_cursor.execute('truncate table stock_basic') #清表
stock_conn.commit() #提交变更
engine = create_engine('mysql://user:pwd@host/database?charset=utf8') #创建engine
data.to_sql('stock_basic', engine, if_exists='append') #运行to_sql,表存在则追加数据
再次运行测试,正常。
这样我们就获取了股票列表,后面我们会遍历列表,调用其他接口,获取更多数据。
这篇笔记就到这里。