上文中《tushare之前复权》提到,从tushare得到复权日K线数据,而返回值是dataframe类型的。现在需要将dataframe类型转换成数组,逐个存入数据库。
dataframe类型,使用values方法,返回数组类型;然后,for循环逐行遍历数组,一行就对于mysql的一条记录,关键部分代码如下:
import tushare as ts
pro = ts.pro_api()
try:
#返回dataframe结构:ts_code/trade_date/open/high/low/close/pre_close/change/pct_chg/vol/amount
#df = pro.daily(ts_code=code, start_date=startDay, end_date=endDay)
#qfq,前复权; hfq,后复权
#返回dataframe结构:ts_code/trade_date/open/high/low/close/pre_close/change/pct_chg/vol/amount
df = ts.pro_bar(ts_code=code, pro_api=pro, adj='qfq', start_date=startDay,end_date=endDay,retry_count=2)
#print(df)
if df is None or len(df) == 0:
print('pro_bar error!!!!!!!!!!!!!!!\n')
continue
except Exception as e:
print('tushare pro_bar error. daily. code=',code)
#使用values可以查看DataFrame里的数据值,返回的是一个数组
arrayAllInfo = df.values
#倒序遍历
for arrayOne in reversed(arrayAllInfo):
# 列: ts_code trade_day open high low close 昨收价 涨跌额 涨跌幅 总手 成交额(千元)
# 索引: 0 1 2 3 4 5 6 7 8 9 10
#print(arrayOne[0],"--",arrayOne[1],"--", arrayOne[2],"--",arrayOne[5],"--",arrayOne[7],"--",arrayOne[8])
#前复权
self.db.add_kdata(arrayOne[0],arrayOne[1], arrayOne[2], arrayOne[5], arrayOne[3], arrayOne[4], arrayOne[9], arrayOne[8], arrayOne[10])