使用tushare进行数据获取(增量获取)

id:503780

tushare进行多接口数据获取和增量获取

多接口获取

在使用tushare的时候,虽然有通用接口,但是并不是所有数据都能直接通过通用接口进行请求,这时候就需要利用pandas当中的merge进行连接。

def get_data(ts_code, start_time_str, current_date):
    # ts_code = '601398.SH'
    # start_date = '20000101'
    # end_date = '20211231'
    pro = ts.pro_api('your token')
    sql = 'SELECT trade_date FROM stock_daily_basic order by trade_date DESC'
    conn = pymysql.connect(host="127.0.0.1", port=3306, user="tushare", passwd="********", db="tushare",
                           charset="utf8mb4")
    cur = conn.cursor()
    df = ts.pro_bar(ts_code=ts_code, start_date=start_time_str, end_date=current_date, factors=[
        'turnover_rate',
    ])
    df1 = pro.daily_basic(
        ts_code=ts_code, start_date=start_time_str, end_date=current_date
        , fields=[
            "ts_code",
            "trade_date",
            "pe_ttm",
            "pb",
            "ps_ttm"
        ])
    df2 = pd.merge(df, df1)#进行连接
    print(df2)
    df2 = df2.to_dict(orient='split')
    df2 = df2.get('data')
    sqlIndex = "INSERT into stock_daily_basic values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
    cur.executemany(sqlIndex, df2)
    conn.commit()
    cur.close()
    conn.close()

这个时候我们将两个获得的数据进行相连并输出到数据库当中。能够相连的前提在于他们拥有同样的列,比如这里的trade_date和ts_code。

增量获取

增量获取的前提是在数据库当中已经存在了对应股票的数据,并且数据库中的元素与将要获取的dataframe的元素相同。满足此前提的情况下,我们进行以下操作:

def fresh_data(ts_code):
    pro = ts.pro_api('your token')
    current_date = datetime.datetime.now().strftime('%Y%m%d')
    sql = 'SELECT trade_date FROM stock_daily_basic order by trade_date DESC'
    conn = pymysql.connect(host="127.0.0.1", port=3306, user="tushare", passwd="********", db="tushare",
                           charset="utf8mb4")
    cur = conn.cursor()
    cur.execute(sql)
    result = cur.fetchone()
    start_time = datetime.datetime.strptime(result[0], '%Y%m%d')
    start_time = start_time + datetime.timedelta(days=1)
    start_time_str = start_time.strftime("%Y%m%d")
    if start_time_str < current_date:
        df = ts.pro_bar(ts_code=ts_code, start_date=start_time_str, end_date=current_date, factors=[
            'turnover_rate',
        ])
        df1 = pro.daily_basic(
            ts_code=ts_code, start_date=start_time_str, end_date=current_date
            , fields=[
                "ts_code",
                "trade_date",
                "pe_ttm",
                "pb",
                "ps_ttm"
            ])
        df2 = pd.merge(df, df1)
        # print(df2)
        df2 = df2.to_dict(orient='split')
        df2 = df2.get('data')
        sqlIndex = "INSERT into stock_daily_basic values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
        cur.executemany(sqlIndex, df2)
        conn.commit()
        cur.close()
        conn.close()

首先我们需要获取数据库当中最新数据的日期,然后与今天日期相比较。如果最新日期不在今天,则更新,否则不更新。由于是增量更新,因此请求的日期应该为数据库中最近日期的后一天。tushare返回的数据对应trade_date为string类型,不能够通过直接加减来访问后一天。此时我们通过datetime库进行类型转换为time,添加一天后在转回string,随即请求相应区间的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值