id:503780
多接口获取
在使用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,随即请求相应区间的数据。