Python tushare writes directly to the mysql database

Foreword : The previous articles all record that tushare is first written to the local hard disk into csv format, and then data is taken from csv for analysis and then imported into mysql. The following code is to directly import the data obtained by tushare into mysql, release the simple code first, and then record the complete code later:

import pandas as pd
import tushare as ts
import pymysql
from urllib import parse
from sqlalchemy import create_engine

#pd.set_option()就是pycharm输出控制显示的设置
pd.set_option('expand_frame_repr', False)#True就是可以换行显示。设置成False的时候不允许换行
pd.set_option('display.max_columns', None)# 显示所有列
#pd.set_option('display.max_rows', None)# 显示所有行
pd.set_option('colheader_justify', 'centre')# 显示居中

pro = ts.pro_api('要到tushare官网注册个账户然后将token复制到这里,可以的话请帮个忙用文章末我分享的链接注册,谢谢')
#df_basic = pro.stock_basic() 获取基础信息数据,包括股票代码、名称、上市日期、退市日期等
#df_daily = pro.daily()  获取所有股票日行情信息,或通过通用行情接口获取数据,包含了前后复权数据,停牌期间不提供数据
#df_daily_basic = pro.daily_basic()获取全部股票每日重要的基本面指标,可用于选股分析、报表展示等。

def get_all_stockdata(st_date, ed_date):
    #此方法连接数据库,密码可以输入特殊字符串
    engine = create_engine('mysql://root:%[email protected]:3306/你的数据库名称?charset=utf8' % parse.unquote_plus(''你的数据库密码'))
    print('数据库连接成功')
    trade_d = pro.trade_cal(exchange='SSE', is_open='1',start_date=st_date,end_date=ed_date,fields='cal_date')
    for date in trade_d['cal_date'].values:
        df_basic = pro.stock_basic(exchange='', list_status='L')    #再获取所有股票的基本信息
        df_daily = pro.daily(trade_date=date)    # 先获得所有股票的行情数据,成交额单位是千元,成交量是手
        df_daily_basic = pro.daily_basic(ts_code='', trade_date=date,fields='ts_code, turnover_rate, turnover_rate_f,'
                                                                            ' volume_ratio, pe, pe_ttm, pb, ps, ps_ttm,'
                                                                            ' dv_ratio, dv_ttm, total_share, float_share,'
                                                                            ' free_share, total_mv, circ_mv ')    #获取每日指标,单位是万股,万元
        df_first = pd.merge(left=df_basic, right=df_daily, on='ts_code', how='outer')  # on='ts_code'以ts_code为索引,合并数据,how='outer',取并集
        df_all = pd.merge(left=df_first, right=df_daily_basic, on='ts_code', how='outer')
        # 数据清洗,删除symbol列数据,跟ts_code数据重复
        df_all = df_all.drop('symbol', axis=1)
        for w in ['name', 'area', 'industry', 'market']:  # 在'name', 'area', 'industry', 'market'列内循环填充NaN值
            df_all[w].fillna('问题股', inplace=True)

        #df_all['amount'] = df_all['amount'] / 100000  # 千转亿
        #df_all['circ_mv'] = df_all['circ_mv'] / 10000  # 万转亿
        #df_all['total_mv'] = df_all['total_mv'] / 10000  # 万转亿

        df_all['ts_code'] = df_all['ts_code'].astype(str)  # 强制转换成str字符串格式
        df_all['list_date'] = pd.to_datetime(df_all['list_date'])  # 本地储存前一定要先转化成日期格式先
        df_all['trade_date'] = pd.to_datetime(df_all['trade_date'])

        #对获取的股票数据列名称进行重命名以方便阅读
        df_all = df_all.rename(columns={
    
    'ts_code': '股票代码', 'name': '股票名称', 'area': '所在地域', 'industry': '行业'
                                        , 'market': '市场类型', 'list_date': '上市日期', 'trade_date': '交易日期', 'change': '涨跌额'
                                        , 'pct_chg': '涨跌幅', 'vol': '成交量(手)', 'amount': '成交额(千元)', 'turnover_rate': '换手率(%)'
                                        , 'turnover_rate_f': '流通换手率', 'volume_ratio': '量比', 'pe': '市盈率', 'pe_ttm': '滚动市盈率'
                                        , 'pb': '市净率', 'ps': '市销率', 'ps_ttm': '滚动市销率', 'dv_ratio': '股息率'
                                        , 'dv_ttm': '滚动股息率', 'total_share': '总股本(万股)', 'float_share': '流通股本 (万股)'
                                        , 'free_share': '自由流通股本(万股)', 'total_mv': '总市值 (万元)', 'circ_mv': '流通市值(万元)'})
        #亏损的为空值

        engine.execute('drop table if exists {}_ts;'.format(date))  #删除重复的数据表
        print('%s is downloading....' % (str(date)))
        df_all.to_sql('{}_ts'.format(date),engine,index=False)
        print('{}成功导入数据库'.format(date))

if __name__=="__main__":
    get_all_stockdata('20200501', '20200509')

Tushare registration link: link

Guess you like

Origin blog.csdn.net/Wilburzzz/article/details/107046528