You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Sqlite3的Python股票价格数据库运行缓慢问题优化咨询

嘿,我来帮你拆解下这个股票数据库创建耗时过长的问题~

一、先揪出数据获取环节的瓶颈

从你的代码看,你用了googlefinance.client这个库拉取25年的日线数据,但这个库其实已经停止维护了,而且Google Finance的公开接口本身有访问限流机制,拉取大跨度数据很容易出现请求缓慢甚至超时的情况。

你可以先单独测下数据获取的耗时,确认是不是这一步拖慢了整体速度:

import time
start = time.time()
param = {'q':'MMM', 'i':"86400",'x':"NYSE",'p':"25Y"}
end_of_day = pd.DataFrame(get_price_data(param))
print(f"数据获取耗时:{time.time() - start}秒")

如果这一步占了90%以上的时间,那建议换成维护更活跃、速度更快的数据源,比如yfinance(替代原来的Yahoo Finance接口,现在还在更新),拉取数据的效率会提升很多:

import yfinance as yf
# 拉取MMM过去25年的日线数据
df = yf.download("MMM", period="25y", interval="1d")
二、数据库写入的优化(最容易被忽略的提速点)

从你的代码片段看,你还没写完写入数据库的逻辑,但如果是用逐行插入+频繁提交的方式,那速度肯定慢到离谱,尤其是几千条数据的情况:

错误的低效写法(别这么干!)

for index, row in end_of_day.iterrows():
    c.execute("INSERT INTO prices VALUES (?, ?, ?, ?, ?)", (row['Open'], row['High'], row['Low'], row['Close'], row['Volume']))
    db.commit()  # 每插一条就提交,频繁IO交互

正确的优化姿势

  1. 用pandas的to_sql()批量写入:这是最省心的方式,自带批量优化,记得加method='multi'参数把多条记录打包成一个SQL语句:
    # 假设你的表名叫stock_prices,index=True把日期索引也写入
    end_of_day.to_sql('stock_prices', db, if_exists='append', index=True, method='multi')
    
  2. 手动批量提交事务:如果要自己写SQL执行,先开启事务,批量插入后再一次性提交,减少数据库IO次数:
    # 把DataFrame转成元组列表
    data_tuples = list(end_of_day.itertuples(index=True, name=None))
    # 开启事务
    db.execute("BEGIN TRANSACTION")
    try:
        # executemany批量插入
        c.executemany("INSERT INTO stock_prices (date, open, high, low, close, volume) VALUES (?, ?, ?, ?, ?, ?)", data_tuples)
        db.commit()
    except Exception as e:
        db.rollback()  # 出错回滚
        raise e
    
  3. 调整sqlite的同步模式:sqlite默认的synchronous=FULL会严格保证数据安全,但批量写入时可以改成NORMAL或OFF来提速(适合一次性导入数据的场景):
    db.execute("PRAGMA synchronous = NORMAL")
    
三、代码里可能藏着的小问题
  • 你代码里的end_o...应该是没写完,要注意DataFrame的列名和数据库表的列名必须对应,不然to_sql()会报错或者插入空值,额外增加处理耗时。
  • 如果后续需要频繁查询数据,建议先插入完所有数据再建索引,边插边建索引会大幅拖慢写入速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:06:02