使用SQLAlchemy与Python操作SQLite时遭遇超时错误求助
问题:SQLAlchemy读取SQLite数据库频繁超时,寻求高效解决方案
我使用Python结合SQLAlchemy读取SQLite数据库时频繁遇到超时错误,后续计划将该数据库配合仪表盘使用,这个问题亟待解决。该数据库包含1000多张表且还在持续增长。
出现超时的代码示例
表空值检查代码
empty_tables = [] for table in rs_tables: df = pd.read_sql_table(table,RSengine.connect()) if df.empty: empty_tables.append(table)
数据库引擎定义:RSengine = sqlalchemy.create_engine('sqlite:///RS.db')
首次触发超时的大规模计算循环
initialErrors = {} initialRS = {} # 分批次拆分表列表 chunks = [tables[i:i + 10] for i in range(0, len(tables), 10)] for chunk in chunks: for ticker in tqdm(chunk): try: stock = pd.read_sql_table(ticker, stockengine.connect(), index_col='Date') # 超时大概率发生在此处 # 截取最近2年的交易数据(约504条) stock1 = stock.iloc[-504:] RSframe = relative_strength(df1=stock1,df2=INDEX1,windows=[21,63]) initialRS[ticker] = RSframe # RSframe.to_sql(ticker, RSengine, if_exists='replace',index=False) except Exception as e: initialErrors[ticker] = e
注:relative_strength函数单次执行平均耗时约7秒,错误明确出现在表读取环节。
已尝试的无效解决方案
- 将大规模表列表拆分为每10张表一个小批次处理
- 在循环迭代末尾添加
sleep,但效率极低 - 尝试将表预读取到内存后再计算,仍出现超时
- 采用Stack Overflow上推荐的SQLAlchemy超时设置方案,问题依旧
核心疑问
- 是否存在更高效的读取方式可以避免超时?
- SQLite是否适合这种包含上千张表且持续增长、还要配合仪表盘使用的场景?
内容的提问来源于stack exchange,提问作者Nishad V Seeraj
相关产品推荐
相关产品推荐

