Python使用TuShare将股票数据保存到Oracle数据
2016-12-30 14:19
591 查看
TuShare是个获取股票数据的模块包,我们进行分析,需要将股票数据保存到本地,避免每次都从网上获取,由于本机装有ORCALE,以ORACLE为例介绍如何保存股票数据到本地。
一、大致思路:我们先获取沪深的所有股票信息,保存到数据库中,主要使用的是dataframe的to_sql函数。
to_sql(self, name, con, flavor='sqlite', schema=None, if_exists='fail',
index=True, index_label=None, chunksize=None, dtype=None):
if_exists参数值有三个,fail:如果表存在返回,append:在表后面追加数据;replace:把表替换掉
二、具体实现:
1、股票价格明细表
create table IQ_STOCK
(
op_time VARCHAR2(10),
open FLOAT,
high FLOAT,
close FLOAT,
low FLOAT,
volume FLOAT,
price_change FLOAT,
p_change FLOAT,
ma5 FLOAT,
ma10 FLOAT,
ma20 FLOAT,
v_ma5 FLOAT,
v_ma10 FLOAT,
v_ma20 FLOAT,
turnover FLOAT,
stockid VARCHAR2(10),
ktype VARCHAR2(1)
)
2、股票基本信息表
create table IQ_STOCK_BASE
(
code VARCHAR2(10),
name VARCHAR2(100),
industry VARCHAR2(100),
area VARCHAR2(100),
pe FLOAT,
outstanding FLOAT,
totals FLOAT,
"totalAssets" FLOAT,
"liquidAssets" FLOAT,
"fixedAssets" FLOAT,
reserved FLOAT,
"reservedPerShare" FLOAT,
esp FLOAT,
bvps FLOAT,
pb FLOAT,
"timeToMarket" NUMBER(19),
undp FLOAT,
perundp FLOAT,
rev FLOAT,
profit FLOAT,
gpr FLOAT,
npr FLOAT,
holders NUMBER(19)
)
3、先获取股票的基本信息:
def Get_Stock_List():
##取得股票基本信息
df = ts.get_stock_basics()
#股票数据保存
engine = create_engine('oracle+cx_oracle://user:password@localhost/orcl')
cnx = engine.connect()
##先清空
strSql = 'truncate table iq_stock_base'
cnx.execute(strSql)
df.to_sql('iq_stock_base', cnx,if_exists='append',chunksize=500)
cnx.close()
return df
4、更新近30天的K线数据,此处更新的是周K线
def Update_StockData():
##开始日期 format:YYYY-MM-DD 为空时取到API所提供的最早日期数据
p_start=time.strftime('%Y-%m-%d',time.localtime(time.time()-24*60*60*30))
p_ktype='W'
#股票数据保存
engine = create_engine('oracle+cx_oracle://user:password@localhost/orcl')
cnx = engine.connect()
#取出股票基本数据
result=pd.read_sql('select * from iq_stock_base',cnx)
for row in result['code']:
try:
##避免重复先删除
strSql = 'delete from iq_stock where stockid=\'{}\' and ktype=\'{}\' and op_time>=\'{}\''.format(row,p_ktype,p_start)
cnx.execute(strSql)
df=ts.get_hist_data(code=row,start=p_start,ktype=p_ktype)
##索引列是oracle保留关键字,必须改名
df.index.names = ['op_time']
df['STOCKID']= row
df['ktype']= p_ktype
df.to_sql('iq_stock', cnx,if_exists='append')
print('code:{}'.format(row))
except:
print('Exception',":",row)
cnx.close()
一、大致思路:我们先获取沪深的所有股票信息,保存到数据库中,主要使用的是dataframe的to_sql函数。
to_sql(self, name, con, flavor='sqlite', schema=None, if_exists='fail',
index=True, index_label=None, chunksize=None, dtype=None):
if_exists参数值有三个,fail:如果表存在返回,append:在表后面追加数据;replace:把表替换掉
二、具体实现:
1、股票价格明细表
create table IQ_STOCK
(
op_time VARCHAR2(10),
open FLOAT,
high FLOAT,
close FLOAT,
low FLOAT,
volume FLOAT,
price_change FLOAT,
p_change FLOAT,
ma5 FLOAT,
ma10 FLOAT,
ma20 FLOAT,
v_ma5 FLOAT,
v_ma10 FLOAT,
v_ma20 FLOAT,
turnover FLOAT,
stockid VARCHAR2(10),
ktype VARCHAR2(1)
)
2、股票基本信息表
create table IQ_STOCK_BASE
(
code VARCHAR2(10),
name VARCHAR2(100),
industry VARCHAR2(100),
area VARCHAR2(100),
pe FLOAT,
outstanding FLOAT,
totals FLOAT,
"totalAssets" FLOAT,
"liquidAssets" FLOAT,
"fixedAssets" FLOAT,
reserved FLOAT,
"reservedPerShare" FLOAT,
esp FLOAT,
bvps FLOAT,
pb FLOAT,
"timeToMarket" NUMBER(19),
undp FLOAT,
perundp FLOAT,
rev FLOAT,
profit FLOAT,
gpr FLOAT,
npr FLOAT,
holders NUMBER(19)
)
3、先获取股票的基本信息:
def Get_Stock_List():
##取得股票基本信息
df = ts.get_stock_basics()
#股票数据保存
engine = create_engine('oracle+cx_oracle://user:password@localhost/orcl')
cnx = engine.connect()
##先清空
strSql = 'truncate table iq_stock_base'
cnx.execute(strSql)
df.to_sql('iq_stock_base', cnx,if_exists='append',chunksize=500)
cnx.close()
return df
4、更新近30天的K线数据,此处更新的是周K线
def Update_StockData():
##开始日期 format:YYYY-MM-DD 为空时取到API所提供的最早日期数据
p_start=time.strftime('%Y-%m-%d',time.localtime(time.time()-24*60*60*30))
p_ktype='W'
#股票数据保存
engine = create_engine('oracle+cx_oracle://user:password@localhost/orcl')
cnx = engine.connect()
#取出股票基本数据
result=pd.read_sql('select * from iq_stock_base',cnx)
for row in result['code']:
try:
##避免重复先删除
strSql = 'delete from iq_stock where stockid=\'{}\' and ktype=\'{}\' and op_time>=\'{}\''.format(row,p_ktype,p_start)
cnx.execute(strSql)
df=ts.get_hist_data(code=row,start=p_start,ktype=p_ktype)
##索引列是oracle保留关键字,必须改名
df.index.names = ['op_time']
df['STOCKID']= row
df['ktype']= p_ktype
df.to_sql('iq_stock', cnx,if_exists='append')
print('code:{}'.format(row))
except:
print('Exception',":",row)
cnx.close()
相关文章推荐
- 在macOS上使用Python+MySQL连接Tushare,进行股票数据下载
- 使用Python来获取国内股票数据的方法:TuShare
- python量化分系列之---使用tushare获取股票实时分笔数据延时有多大
- 配置python环境使用tushare股票数据
- #小练习 使用字典保存HTMLParser解析的数据 分类: python 小练习 HTMLParser 2013-11-08 20:51 574人阅读 评论(0) 收藏
- python爬取网站数据保存使用的方法
- TuShare(2):使用TuShare,抓取股票数据并存储到数据库
- python3+PyQt5 使用自定义模型保存数据并通过不同视图形式展示数据
- Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
- python金融数据分析1:tushare使用
- Python学习(十五)——使用cPickle读取和保存数据
- 使用Python破解通达信股票数据
- 用两种不同的方法导出ORACLE 查询数据为CSV 文件 (python 代码 与 使用 utl_file 包)
- python量化分析系列之---python分别使用多线程和多进程获取所有股票实时数据
- 使用tushare获取股票历史数据和实时分笔数据
- python爬虫由浅入深9---定向爬取股票数据信息并保存至本地文件
- Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
- python使用h5py读取mat文件数据,并保存图像
- PythonStock(15):使用bokeh 展示股票报表数据
- 【Python量化投资系列】使用Python从Wind量化接口下载全部A股股票历史行情数据