编程语言:python
编程工具:pycharm
数据来源:tushare
连接mysql方式:SQLAlchemy
1、创建“股票列表”表结构,存为mysql_tables_structure.py
# coding=utf-8
from sqlalchemy import Column, String, Float
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class StockBasic(Base):
"""股票列表
is_hs strN是否沪深港通标的,N否 H沪股通 S深股通
list_statusstrN上市状态: L上市 D退市 P暂停上市
exchangestrN交易所 SSE上交所 SZSE深交所 HKEX港交所(未上线)
"""
__tablename__ = 'stock_basic'
ts_code = Column(String(10), primary_key=True) # TS代码
symbol = Column(String(10)) # 股票代码
name = Column(String(10)) # 股票名称
area = Column(String(4)) # 所在地域
industry = Column(String(4)) # 所属行业
fullname = Column(String(30)) # 股票全称
enname = Column(String(100)) # 英文全称
market = Column(String(3)) # 市场类型 (主板/中小板/创业板)
exchange = Column(String(4)) # 交易所代码
curr_type = Column(String(3)) # 交易货币
list_status = Column(String(1)) # 上市状态: L上市 D退市 P暂停上市
list_date = Column(String(8)) # 上市日期
delist_date = Column(String(8)) # 退市日期
is_hs = Column(String(1)) # 是否沪深港通标的,N否 H沪股通 S深股通
2、建立获取tushare数据函数,存为tushare_data.py
# coding=utf-8
import time
import pandas as pd
def get_stock_basic(pro, retry_count=3, pause=2):
"""股票列表 数据"""
frame = []
for status in ['L', 'D', 'P']:
for _ in range(retry_count):
try:
df = pro.stock_basic(exchange='', list_status=status,
fields='ts_code,symbol,name,area,industry,fullname,enname,market, \
exchange,curr_type,list_status,list_date,delist_date,is_hs')
except:
time.sleep(pause)
else:
frame.append(df)
break
return frame
3、更新“股票列表”数据,存为mysql_functions.py
# coding=utf-8
import pandas as pd
import tushare_data as td
def truncate_update(engine, data, table_name):
"""删除mysql表所有数据,to_sql追加新数据"""
conn = engine.connect()
conn.execute('truncate ' + table_name)
data.to_sql(table_name, engine, if_exists='append', index=False)
def update_stock_basic(engine, pro, retry_count, pause):
"""更新 股票信息 所有数据"""
data = td.get_stock_basic(pro, retry_count, pause)
truncate_update(engine, data, 'stock_basic')
4、主程序
# coding=utf-8
import pandas as pd
import tushare as ts
from sqlalchemy import create_engine
from mysql_tables_structure import Base
import mysql_functions as mf
# 创建数据库引擎
engine = create_engine(mysql://root:****@127.0.0.1/databasename?charset=utf8mb4)
conn = engine.connect()
# 创建mysql所有表结构
Base.metadata.create_all(engine)
# 连接 tushare
ts.set_token(token****)
pro = ts.pro_api()
# 股票列表
mf.update_stock_basic(engine, pro, 3, 2)