通过调用API获取股票数据,并把数据存入数据库表

本文描述了一位技术人员如何使用Navicat创建名为pe_ratio的数据库表,然后通过Python调用tushareAPI获取股票历史市盈率数据,处理异常值后,将数据存储到数据库中,区分上证和深证股票类型。
摘要由CSDN通过智能技术生成

这周接到的任务是创建并维护市盈率表,一开始这个表是不存在的,我的做法是先用navicat创建这张表,我把这张表起名为pe_ratio,这个是我在设计这张表的一些设置。

 下一步就是用python调用tushare数据接口获取数据,代码如下:

# 导入tushare
import datetime
import tushare as ts
import numpy as np
from pymysql.converters import escape_string
from tradingSystem import constants

# 初始化pro接口
pro = ts.pro_api(constants.token)

# 获取股票历史市盈率数据
def getHistoryPERatio():
    d1 = datetime.date(2023,2,15) # 起始日期
    d2 = datetime.date(2023,5,12) # 终止日期
    while d1 <= d2:
        y, m, d = str(d1)[:10].split('-')
        day = y + m + d
        # 调用pro的API接口,取需要的数据
        df = pro.daily_basic(**{"trade_date": day},
                           fields=[
                               "ts_code",  # 股票代码
                               "trade_date",  # 交易日期
                               "turnover_rate",  # 换手率
                               "volume_ratio",  # 量比
                               "pe",  # 市盈率(总市值/净利润, 亏损的PE为空)
                               "pb"  # 市净率(总市值/净资产)
                           ])
        print(df)

这一步获取的数据如下(这只是一小部分):

 然后处理这些数据中的异常值的表示,因为会影响存储过程的正常进行。

# 将df中所有的inf和NaN数据都表示为0.00
        df = df.replace([np.inf, -np.inf], np.nan)
        df = df.fillna(0)

处理后的数据如下,可以看到所有的Nan和inf都表示成了零。

 最后一步就是把这些数据存入数据库表中了,这一步我通过识别股票代码中的后缀是“SH”还是“SZ”得出对应的股票类型是上证还是深证,并存入数据表中对应的股票类型,其他的获取到的数据也依次存入对应的地方,代码如下:

res = np.array(df)
        # print(res)
        conn = constants.connection()
        cursor = conn.cursor()
        sql = "INSERT INTO pe_ratio(ts_code, stock_type,trade_date,turnover_rate,volume_ratio,pe,pb) VALUES(%s, %s, %s, %s, %s, %s, %s)"
        # 通过股票代码的后缀识别股票类型,并把获取到的所有数据存入市盈率表中
        for i in range(len(res)):
            if res[i][0][7:] == 'SH':
                cursor.execute(sql, [escape_string(res[i][0][:6]), escape_string('上证'), escape_string(res[i][1]), res[i][2], res[i][3], res[i][4], res[i][5]])
            else:
                cursor.execute(sql, [escape_string(res[i][0][:6]), escape_string('深证'), escape_string(res[i][1]), res[i][2], res[i][3], res[i][4], res[i][5]])
            conn.commit()  # 把所有的操作保存到数据库中
        d1 += datetime.timedelta(days=1)  # 日期变成当前日期的后一天
    cursor.close()
    conn.close()

运行成功后就可以在navicat中看到数据了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值