You need to enable JavaScript to run this app. Python使用PyMySQL查询股票多周期历史价格及格式化问题
优惠活动
大模型
产品
解决方案
定价
更多

Python使用PyMySQL查询股票多周期历史价格及格式化问题

优化实现代码

import datetime
import pymysql

# 初始化数据库连接
db = pymysql.connect(host='localhost', user='Test', password='TestPassword', database='dbInvest')
# 目标查询日期变量
varrDate2 = datetime.datetime.now().strftime("%Y-%m-%d")
# 股票ID也可提取为变量灵活修改
var_stock_id = 7

try:
    with db.cursor(pymysql.cursors.DictCursor) as cursor:
        # 1. 使用参数化查询占位符替换硬编码内容
        sqllookup = """
            SELECT rPrice FROM tblHistory 
            WHERE rStockID = %s AND rDate >= DATE_ADD(%s, INTERVAL -7 DAY) 
            ORDER BY ABS(DATEDIFF(rDate, %s)) ASC 
            LIMIT 1
        """
        # 按顺序传入参数,pymysql会自动处理类型转义,同时避免SQL注入风险
        cursor.execute(sqllookup, (var_stock_id, varrDate2, varrDate2))
        result = cursor.fetchone()
        if result:
            # 2. 直接从字典结构中取字段值,Decimal类型可直接输出
            price = result['rPrice']
            # 如需后续数值计算可转float:float(price),直接打印则输出纯数值
            print(f"1 Week Value is {price}")
        else:
            print("未查询到对应价格数据")
finally:
    db.close()

问题解决说明

  • 替换SQL硬编码日期:放弃字符串拼接SQL的方式,使用pymysql原生参数化查询能力,用%s作为参数占位符,执行语句时按顺序传入变量即可,不需要手动处理日期格式转义。另外优化了排序逻辑,用ABS(DATEDIFF(rDate, %s))取与目标日期间隔最小的记录,比单纯按日期升序取的结果更贴合「最近邻近记录」的需求。
  • 提取纯数值输出:DictCursor返回的结果是字典结构,直接通过字段名取出对应值即可,返回的Decimal类型是MySQL数值类型的精确映射,不需要做字符串拆分替换,直接打印就会输出86.7400的效果,如果需要参与后续数值计算,直接转为float类型即可。

注:如果实际表中价格字段为你输出示例里的ClosePrice,而非描述里的rPrice,把代码中对应的字段名替换即可。

内容的提问来源于stack exchange,提问作者Craig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 10:24:08