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

本文详细介绍如何使用Python和SQLAlchemy将股票数据保存至MySQL数据库,包括安装配置、数据表设计及数据更新策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门

本系列原创博文传送门:

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

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

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

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

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

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

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

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

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

正文

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

再次运行测试,正常。

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

这篇笔记就到这里。

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值