用python获取tushare数据并存入mysql数据库(二)日线行情

编程语言:python
编程工具:pycharm
数据来源:tushare
连接mysql方式:SQLAlchemy

1、创建“日线行情”表结构

class Daily(Base):
    """日线行情
    ts_code	str	N	股票代码(二选一)
    trade_date	str	N	交易日期(二选一)
    start_date	str	N	开始日期(YYYYMMDD)
    end_date	str	N	结束日期(YYYYMMDD)
    """
    __tablename__ = 'daily'

    ts_code = Column(String(10), primary_key=True)      # 股票代码
    trade_date = Column(String(8), primary_key=True)    # 交易日期
    open = Column(Float)        # 开盘价
    high = Column(Float)        # 最高价
    low = Column(Float)         # 最低价
    close = Column(Float)       # 收盘价
    pre_close = Column(Float)   # 昨收价
    change = Column(Float)      # 涨跌额
    pct_chg = Column(Float)     # 涨跌幅 (未复权,如果是复权请用 通用行情接口 )
    vol = Column(Float)         # 成交量 (手)
    amount = Column(Float)      # 成交额 (千元)

2、建立获取tushare数据函数

def get_daily_code(pro, ts_code, start_date, end_date, retry_count=3, pause=2):
    """股票代码方式获取 日线行情 数据"""
    for _ in range(retry_count):
        try:
            df = pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date,
                           fields='ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount')
        except:
            time.sleep(pause)
        else:
            return df


def get_daily_date(pro, date, retry_count=3, pause=2):
    """日期方式获取 日线行情 数据"""
    for _ in range(retry_count):
        try:
            df = pro.daily(trade_date=date,
                           fields='ts_code,trade_date,open,high,low,close,pre_close,change,pct_chg,vol,amount')
        except:
            time.sleep(pause)
        else:
            return df

3、增删“日线行情”数据

def get_ts_code(engine):
    """查询ts_code"""
    return pd.read_sql('select ts_code from stock_basic', engine)


def delete_daily(engine, start_date, end_date):
    """删除 日线行情 数据"""
    conn = engine.connect()
    conn.execute('delete from daily where  trade_date between ' + start_date + ' and ' + end_date)


def update_all_daily(engine, pro, codes, start_date, end_date, retry_count, pause):
    """股票代码方式更新 日线行情"""
    for value in codes['ts_code']:
        df = td.get_daily_code(pro, value, start_date, end_date, retry_count, pause)
        df.to_sql('daily', engine, if_exists='append', index=False)
        time.sleep(0.6)


def update_daily_date(engine, pro, date, retry_count, pause):
    """日期方式更新 日线行情"""
    df = td.get_daily_date(pro, date, retry_count, pause)
    df.to_sql('daily', engine, if_exists='append', index=False)

4、主程序

# 根据需要增删 日线行情 数据  单次提取*4000*条
mf.delete_daily(engine, '19901219', '20191231')
codes = mf.get_ts_code(engine)
mf.update_all_daily(engine, pro, codes, '19901219', '20051231', 3, 2)
mf.update_daily_date(engine, pro, '20190702', 3, 2)

tushare注册链接:https://tushare.pro/register?reg=258131

你可能感兴趣的:(tushare)