Python调用SQLite查询滚动平均值报错问题求助
Python调用SQLite查询滚动平均值报错问题求助
看起来你在尝试用Python连接SQLite计算滚动平均值,但代码好像没写完就遇到问题了?先给你梳理下可能的问题点和具体的解决思路哈~
首先,先看你给出的连接代码,有几个可以优化的地方,而且核心的滚动平均查询语句还没加上。先给你补全并优化代码,同时覆盖滚动平均的实现:
一、先确保连接和查询的基础代码没问题
推荐用with语句自动管理数据库连接,不用手动关闭,更安全省心:
import sqlite3 sql_db_path = "/home/Documents/src" sql_db_name = "temp.db" try: with sqlite3.connect(f'{sql_db_path}/{sql_db_name}') as sqlConn: sqlCursor = sqlConn.cursor() print(f'Connected Successfully to SQL db :: [{sql_db_path}/{sql_db_name}]') # 这里替换成你实际的表和字段,比如计算最近3条数据的滚动平均 rolling_avg_query = """ SELECT time, value, AVG(value) OVER(ORDER BY time ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS rolling_avg FROM data_table; """ sqlCursor.execute(rolling_avg_query) results = sqlCursor.fetchall() # 遍历打印结果 for row in results: print(f"时间: {row[0]}, 当前值: {row[1]}, 滚动平均值: {row[2]:.2f}") except sqlite3.Error as e: print(f'连接或查询SQL数据库时出错 :: [{sql_db_path}/{sql_db_name}], 错误信息: {str(e)}, 正在退出..........') except Exception as e: print(f'发生未知错误: {str(e)}, 正在退出..........')
二、常见问题排查
SQLite版本不支持窗口函数
如果你的SQLite版本低于3.25.0,AVG() OVER()这种窗口函数是用不了的。可以在Python里执行print(sqlite3.sqlite_version)查看版本。
这种情况下得用自连接的方式实现滚动平均,比如按行号关联计算最近3条的平均值:WITH ranked_data AS ( SELECT value, ROW_NUMBER() OVER(ORDER BY rowid) AS rn FROM data_table ) SELECT r1.rn, r1.value, AVG(r2.value) AS rolling_avg FROM ranked_data r1 JOIN ranked_data r2 ON r2.rn BETWEEN r1.rn - 2 AND r1.rn GROUP BY r1.rn, r1.value ORDER BY r1.rn;表或字段名拼写错误
要确保你的查询语句里的表名、字段名和数据库里的完全一致,SQLite在部分配置下是大小写敏感的,别因为拼写小细节卡壳。异常处理太宽泛
你原来的代码用了except:捕获所有异常,不利于定位具体问题,换成捕获sqlite3.Error能拿到更精准的数据库相关错误信息,方便排查。
如果还有具体的报错信息,可以补充上来,这样能更精准地帮你解决问题哦~
内容来源于stack exchange
相关产品推荐
相关产品推荐

