从零开始用Python实现股票量化交易之小白笔记(3)

这一篇用来讲述如何将从接口获得的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,表存在则追加数据

再次运行测试,正常。

这样我们就获取了股票列表,后面我们会遍历列表,调用其他接口,获取更多数据。

这篇笔记就到这里。

你可能感兴趣的:(python,量化交易,股票,数据分析)