周末有同学问我 之前写的tushare例子入库, 反馈怎么没有 股票代码、股票名称、 行业等信息。用过tushare的同学都知道, 他说的这些信息在基础信息接口。 打开tushare官方网站你会发现:接口:stock_basic,可以通过数据工具调试和查看数据
描述:获取基础信息数据,包括股票代码、名称、上市日期、退市日期等
权限:2000积分起。此接口是基础信息,调取一次就可以拉取完,建议保存到本地存储后使用1、可能同学没采购 tushare积分,毕竟要2000积分起既然这样,我这里写个例子,如果需要 大A 的5000多条数据,可以加我微信私信我说明情况。 我把我获取的mysql 这块数据私发, 如果不知道mysql是啥玩意的 或者不懂怎么安装mysql的就真心没必要了。 另外有同学问我 ,tushare和miniqmt获取行情源怎么选择,为啥我推荐这2个数据源。 这里说下原因, 目前tushare和miniqmt 相对其他的门槛更低且稳定。 像akshare频繁爬取东方财富有封账号风险,我不是太推荐了。 tushare适合不用windows的同学且只做量化分析, 而如果想量化交易,建议直接miniqmt吧,一步到位。毕竟miniqmt现在门槛也低, 开户入金10w就可以搞定,没qmt资源的可以联系我。 最后附上完整代码,需要的自取。 备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。import tushare as tsimport pandas as pdfrom sqlalchemy import create_engineimport scheduleimport timeimport logginglogging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[logging.StreamHandler()])logger = logging.getLogger()ts.set_token('XXXXXX') pro = ts.pro_api()DB_CONFIG = { 'user': 'root', 'password': '12345678', 'host': 'localhost', 'database': 'db_stock', 'charset': 'utf8mb4',}engine = create_engine( f"mysql://{DB_CONFIG['user']}:{DB_CONFIG['password']}@{DB_CONFIG['host']}/{DB_CONFIG['database']}?charset={DB_CONFIG['charset']}")def get_stock_basic_data(): """获取股票基础数据并进行类型处理""" try: df = pro.stock_basic() return df except Exception as e: logger.error(f"❌ 获取股票数据失败: {str(e)}") return pd.DataFrame()def save_to_database(df, table_name): """保存数据到数据库,使用批处理并优化性能""" if df.empty: logger.warning("⚠️ 无有效数据需要保存") return False try: df.to_sql( table_name, engine, if_exists='replace', index=False, chunksize=1000 ) logger.info(f"💾 成功保存 {len(df)} 条数据到表 {table_name}") return True except Exception as e: logger.error(f"❌ 数据库写入失败: {str(e)}") return Falsedef full_update_stock_basic(): """全量更新股票基础数据""" start_time = time.time() logger.info("🔄 开始全量更新股票基础数据...") df = get_stock_basic_data() if not df.empty: success = save_to_database(df, 'stock_basic') if success: duration = time.time() - start_time logger.info(f"✅ 更新完成! 耗时: {duration:.2f}秒") else: logger.warning("⚠️ 未获取到有效数据,更新终止")if __name__ == '__main__': print("=" * 50) print("📊 股票数据管理系统启动") print("=" * 50) full_update_stock_basic() schedule.every().day.at("20:00").do( lambda: logger.info("⏰ 触发定时任务...") or full_update_stock_basic() ) print("\n🚀 定时任务守护进程已启动 (每日20:00执行)") print("=" * 50) print("📋 运行日志:") try: while True: schedule.run_pending() time.sleep(60) except KeyboardInterrupt: print("\n🔚 程序已手动终止")
如果我的分享对你投资有所帮助,不吝啬给个点赞关注呗。如果对每日复盘感兴趣,欢迎关注我另外一个号。重在市场理解(大盘情绪、 热门概念板块、 热门个股), 技术只是辅助。