news 2026/5/23 6:17:46

Day 73:【99天精通Python】金融数据看板 - 后端接口与数据分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 73:【99天精通Python】金融数据看板 - 后端接口与数据分析

Day 73:【99天精通Python】金融数据看板 - 后端接口与数据分析

前言

欢迎来到第73天!

在昨天,我们成功地将股票历史数据存入了 SQLite 数据库。今天,我们的任务是将这些"死数据"变成"活数据"。

前端(ECharts)需要特定的 JSON 格式才能画图。我们需要在后端:

  1. 查询数据库。
  2. 使用 Pandas 计算技术指标(如 MA5, MA20)。
  3. 将数据格式化为 JSON 并通过 API 返回。

本节内容:

  • Pandas 读取 SQL 数据 (read_sql)
  • 计算移动平均线
  • 编写 RESTful API 接口
  • 处理跨域问题 (CORS)

一、编写数据分析服务 (services/analysis.py)

我们需要一个模块,专门负责从数据库取数并计算指标。

importpandasaspdfromappimportdbfrommodelsimportStockDailyclassStockAnalyzer:defget_kline_data(self,code):"""获取 K 线图所需的数据"""# 1. 使用 Pandas 直接读取 SQL (效率高)# 仅读取需要的字段,按日期升序sql=db.session.query(StockDaily.date,StockDaily.open,StockDaily.close,StockDaily.low,StockDaily.high,StockDaily.volume).filter(StockDaily.code==code).order_by(StockDaily.date.asc()).statement df=pd.read_sql(sql,db.session.bind)ifdf.empty:returnNone# 2. 计算均线df['MA5']=df['close'].rolling(window=5).mean()df['MA10']=df['close'].rolling(window=10).mean()df['MA20']=df['close'].rolling(window=20).mean()# 3. 填充 NaN (ECharts 不支持 NaN,需转为 None 或 0,这里前端处理通常更方便,或者填0)df=df.fillna(0)# 4. 格式化日期字符串df['date']=df['date'].astype(str)returndfdefget_stock_list(self):"""获取所有股票列表用于搜索"""sql="SELECT code, code_name FROM stock_basic"df=pd.read_sql(sql,db.session.bind)returndf.to_dict(orient='records')

二、编写 API 路由 (app.py)

修改app.py,增加两个 API 接口。

fromflaskimportFlask,jsonify,requestfromflask_sqlalchemyimportSQLAlchemyfromconfigimportConfig# 引入分析服务fromservices.analysisimportStockAnalyzer app=Flask(__name__)app.config.from_object(Config)db=SQLAlchemy(app)analyzer=StockAnalyzer()# 1. 股票搜索接口@app.route("/api/stocks")defapi_stocks():stocks=analyzer.get_stock_list()returnjsonify(stocks)# 2. K线数据接口@app.route("/api/kline/<code>")defapi_kline(code):df=analyzer.get_kline_data(code)ifdfisNone:returnjsonify({"error":"No data found"}),404# ECharts 需要的数据格式通常是独立的列表# dates: ['2023-01-01', ...]# values: [[open, close, low, high], ...] (注意 ECharts 的 K线顺序)# volumes: [vol1, vol2...]data={"dates":df['date'].tolist(),# ECharts Candlestick: [open, close, low, high]"values":df[['open','close','low','high']].values.tolist(),"volumes":df['volume'].tolist(),"ma5":df['MA5'].tolist(),"ma10":df['MA10'].tolist(),"ma20":df['MA20'].tolist()}returnjsonify(data)if__name__=="__main__":app.run(debug=True)

三、测试 API

启动 Flask (python app.py),在浏览器或 Postman 中访问:

  1. http://127.0.0.1:5000/api/stocks

    • 预期返回:[{"code": "sh.600519", "code_name": "贵州茅台"}, ...]
  2. http://127.0.0.1:5000/api/kline/sh.600519

    • 预期返回:
      {"dates":["2023-01-04",...],"values":[[1727.0,1725.01,1718.0,1738.0],...],"ma5":[0,0,0,0,1730.2,...],...}

四、解决跨域问题 (CORS)

虽然我们在同一个项目里开发,但如果将来前端和后端分开部署(比如前端用 Vue 跑在 8080,后端 Flask 跑在 5000),就会遇到跨域报错。
我们可以使用flask-cors扩展来未雨绸缪。

安装:

pipinstallflask-cors

修改app.py

fromflask_corsimportCORS app=Flask(__name__)CORS(app)# 允许所有来源的跨域请求

五、小结

pd.read_sql

DataFrame

计算 MA

Format JSON

Response

前端请求 /api/kline/600519

Flask Route

StockAnalyzer

SQLite

关键要点

  1. Pandas + SQLread_sql是连接数据库与数据分析的桥梁,比手动cursor.fetchall再转 DataFrame 快且方便。
  2. 数据清洗:在后端计算好 MA 等指标,前端只负责展示,这是比较好的架构模式(轻前端,重后端)。
  3. JSON 序列化:NumPy/Pandas 的数据类型(如int64)不能直接被jsonify序列化,通常需要tolist()转为原生 Python 列表。

六、课后作业

  1. 增加指标:修改analysis.py,增加RSI (相对强弱指标)MACD的计算,并添加到 API 返回结果中。
  2. 日期筛选:给 API 增加start_dateend_date参数,允许前端只请求最近 3 个月的数据(减少传输量)。
  3. 异常处理:如果用户请求了一个不存在的股票代码,API 应该返回什么样的状态码和错误信息?完善这部分逻辑。

下节预告

Day 74:金融数据看板 - 前端展示 (ECharts)- 后端数据已经准备就绪。明天我们将编写 HTML 和 JS,使用 ECharts 绘制出专业的交互式 K 线图!


系列导航

  • 上一篇:Day 72 - 金融数据看板数据层实现
  • 下一篇:Day 74 - 金融数据看板前端ECharts(待更新)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 15:39:01

AI写作大师Qwen3-4B创意写作:诗歌生成实战案例

AI写作大师Qwen3-4B创意写作&#xff1a;诗歌生成实战案例 1. 引言&#xff1a;AI赋能创意写作的新范式 1.1 创意写作的智能化转型 随着大语言模型技术的不断演进&#xff0c;AI在自然语言生成领域的表现已从简单的文本补全发展到具备高度创造性的内容产出。尤其是在文学创作…

作者头像 李华
网站建设 2026/5/9 20:42:08

科哥构建的镜像做了哪些优化?启动脚本深度剖析教程

科哥构建的镜像做了哪些优化&#xff1f;启动脚本深度剖析教程 1. 功能概述 本工具基于阿里达摩院 ModelScope 的 DCT-Net 模型&#xff0c;支持将真人照片转换为卡通风格。该模型采用 UNet 架构设计&#xff0c;专为人像到卡通图像的端到端转换任务优化&#xff0c;在保留人…

作者头像 李华
网站建设 2026/5/23 17:40:20

Qwen3-1.7B自动化测试用例生成:研发提效实战

Qwen3-1.7B自动化测试用例生成&#xff1a;研发提效实战 1. 背景与技术选型 在当前软件研发流程中&#xff0c;测试用例的编写是保障代码质量的重要环节。然而&#xff0c;传统手工编写测试用例的方式存在效率低、覆盖率不足、维护成本高等问题。随着大语言模型&#xff08;L…

作者头像 李华
网站建设 2026/5/23 20:36:07

GPT-OSS-20B多实例部署:WEBUI并发调用实战案例

GPT-OSS-20B多实例部署&#xff1a;WEBUI并发调用实战案例 1. 引言 1.1 业务场景描述 随着大模型在自然语言处理领域的广泛应用&#xff0c;企业对高效、可扩展的推理服务需求日益增长。GPT-OSS 系列作为 OpenAI 开源的重要成果之一&#xff0c;具备强大的语言生成能力与良好…

作者头像 李华