import akshare as ak
import pandas as pd
import pymysql
from apscheduler.schedulers.blocking import BlockingScheduler
from loguru import logger
import time
import os
log_path = os.path.join('/logs/sec_name'+ time.strftime("%Y-%m-%d", time.localtime()) + '.log')
logger.add(log_path, format="{time:YYYY-MM-DD at HH:mm:ss.SSS}|{level}|{message}", level="INFO", rotation="100MB",compression='zip', enqueue=True, diagnose=True, retention="5 days", )
class Loggings:
__instance = None
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = super(Loggings, cls).__new__(cls, *args, **kwargs)
return cls.__instance
def info(self, msg):
return logger.info(msg)
def debug(self, msg):
return logger.debug(msg)
def warning(self, msg):
return logger.warning(msg)
def error(self, msg):
return logger.error(msg)
def exception(self, msg):
return logger.exception(msg)
def connect_sql():
conn = pymysql.connect(host="127.0.0.1",port=3306,user='root',password='123456',db='mysql')
return conn
# 上海深圳代码
def sw():
total_df = pd.DataFrame()
for ind in ["主板A股", "科创板"]:
df = ak.stock_info_sh_name_code(indicator = ind)[['公司代码','公司简称']]
df.columns = ['security_id', 'security_name']
total_df = pd.concat([total_df, df])
## SZ: {"A股列表", "B股列表", "CDR列表", "AB股列表"}
## ['板块', 'A股代码', 'A股简称', 'A股上市日期', 'A股总股本', 'A股流通股本', '所属行业']
for ind in ["A股列表"]:
df = ak.stock_info_sz_name_code(indicator="A股列表")[['A股代码','A股简称']]
df.columns = ['security_id', 'security_name']
total_df = pd.concat([total_df, df])
## {"暂停上市公司", "终止上市公司"}
df = ak.stock_info_sz_delist(indicator="暂停上市公司")
df.columns = ['security_id', 'security_name', 'listing_date', 'pause_date']
df = df[['security_id', 'security_name']]
total_df = pd.concat([total_df, df])
df = ak.stock_info_sz_delist(indicator="终止上市公司")
df.columns = ['security_id', 'security_name', 'listing_date', 'delisting_date']
df = df[['security_id', 'security_name']]
total_df = pd.concat([total_df, df])
return total_df
#更新数据
def intodb():
sw_df = sw()
hk_df = hk()
truncate_sql = "truncate table invents_stock_name"
sql = "insert into invents_stock_name(security_id,security_name)values(%s,%s)"
conn = connect_sql()
cur = conn.cursor()
#更新数据前 清空表中原有数据
try:
cur.execute(truncate_sql)
except:
loggings.info(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}------->数据清空失败')
#数据入库
for index,row in sw_df.iterrows():
cur.execute(sql,(row[0],row[1]))
for index,row in hk_df.iterrows():
cur.execute(sql,(row[0], row[1]))
cur.close()
conn.commit()
conn.close()
loggings.info(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}------->更新完毕')
#港股代码
def hk():
df = ak.stock_hk_spot_em()
df = df[['代码', '名称']]
df.columns = ['security_id', 'security_name']
df = df[['security_id', 'security_name']]
return df
if __name__ == '__main__':
loggings = Loggings()
sched = BlockingScheduler()
#执行定时任务 每两周执行一次
sched.add_job(intodb, 'interval', weeks=2, id='my_job_id')
loggings.info(f'{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}------->定时任务开启更新')
sched.start()
python获取股票代码对应名称
于 2022-07-12 15:06:31 首次发布