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://xulp:yiyi2009A!@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)
            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()

Python使用TuShare将股票数据保存到Oracle数据的更多相关文章

  1. 快速将excel数据保存到Oracle数据库中【转】

    我们在工作中,也许会碰到以下情况,客户或者同事发来需要调查的数据,并不是dmp文件,而是excel文件,此时通常是一张表,少量几条记录.最近我恰好碰到了这种情况,所以做了些调查,不敢藏私,拿出来跟大家 ...

  2. 吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB

    本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...

  3. 1.scrapy爬取的数据保存到es中

    先建立es的mapping,也就是建立在es中建立一个空的Index,代码如下:执行后就会在es建lagou 这个index.     from datetime import datetime fr ...

  4. 我用C#调用C编译的dll中有这样一个函数,函数大概的功能就是把数据保存到buf缓冲区中:

    我用C#调用C编译的dll中有这样一个函数,函数大概的功能就是把数据保存到buf缓冲区中: C/C++ code   ? 1 int retrieve(int scanno,void* buf); 在 ...

  5. Excel文件数据保存到SQL中

    1.获取DataTable /// <summary> /// 查询Excel文件中的数据 /// </summary> /// <param name="st ...

  6. 将爬取的数据保存到mysql中

    为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了 安装数据库 1.pip install pymysql(根据版本来装) 2.创建数据 打开终端 键入mysql -u root -p ...

  7. mysql触发器的使用 想让b字段在更新的时候把旧数据保存到a字段中

    使用mysql希望数据库自动触发一些规则,进行更新数据的时候,就需要用触发器了,比如 将旧数据保存到额外字段中,如何做呢? 在abc表中 name更新的时候 我希望把name的老数据保存到 old_n ...

  8. 简单抓取安居客房产数据,并保存到Oracle数据库

    思路和上一篇差不多,先获取网站html文件,使用BeautifulSoup进行解析,将对应属性取出,逐一处理,最后把整理出的记录保存到oracle中,持久化储存. '''Created on 2017 ...

  9. 为什么查询出来的数据保存到Arraylist?插入删除数据为啥用LinkedList?

    引言:这是我在回答集合体系时,被问到的一个问题,也是因为没有深入学习所以回答的并不是很好,所以这两天看了一下,以下是我的一些回答与学习方法. 学习方法:我们学习,系统性的学习肯定是比零散的学习更有效的 ...

随机推荐

  1. 【USACO 3.3】Riding The Fences(欧拉路径)

    题意: 给你每个fence连接的两个点的编号,输出编号序列的字典序最小的路径,满足每个fence必须走且最多走一次. 题解: 本题就是输出欧拉路径. 题目保证给出的图是一定存在欧拉路径,因此找到最小的 ...

  2. 文件共享锁定数溢出-IWorkspaceEdit.StopEditing

    在批量保存Feature至本地mdb的时候,当Feature的数量超过一定的值(该值不确定是不是Access文件的MaxLocksPerFile值,因为当MaxLocksPerFile为9500时,F ...

  3. java第二周周学习总结

    java运算符和循环 java运算符 一.for 语句 for 语句的基本结构如下所示:for(初始化表达式;判断表达式;递增(递减)表达式){    执行语句;   //一段代码} 初始化表达式:初 ...

  4. 【poj3270】 Cow Sorting

    http://poj.org/problem?id=3270 (题目链接) 题意 n个数要要按从小到大的顺序排列,每次只能交换任意两个数,交换的代价为这两个数之和,问最小代价. Solution 题目 ...

  5. bzoj1415[NOI2005]聪聪和可可

    之前做的一些图上的期望步数的题大多用到高斯消元来求解(HNOI游走,SDOI走迷宫,etc),因此我一开始做这道题的时候想偏了- 这道题的性质:聪聪和可可之间的最短路长度严格递减.因为聪聪总可以多走一 ...

  6. win10 右键菜单添加Git Hash Here

    1.通过在"运行"中输入'regedit',打开注册表. 2.找到[HKEY_CLASSES_ROOT\Directory\Background]. 3.在[Background] ...

  7. Java虚拟机(JVM)以及跨平台原理详细的介绍

    相信大家已经了解到Java具有跨平台的特性,可以"一次编译,到处运行",在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的.那么,跨平台是 ...

  8. c# .Net并行和多线程编程之Task学习记录!

    任务Task和线程Thread的区别: 1.任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行. 2.任务跟线程不是一对一的关系,比如开10个任务并不是说会开10个线程,这一点任务有点类似线 ...

  9. 二、基于hadoop的nginx访问日志分析---计算日pv

    代码: # pv_day.py#!/usr/bin/env python # coding=utf-8 from mrjob.job import MRJob from nginx_accesslog ...

  10. Servlet使用注解标注监听器(Listener)

    Servlet3.0提供@WebListener注解将一个实现了特定监听器接口的类定义为监听器,这样我们在web应用中使用监听器时,也不再需要在web.xml文件中配置监听器的相关描述信息了. 下面我 ...