使用DuckDB Python时查询中断致SQLite数据库文件失效求助
解决DuckDB连接SQLite后数据库失效的问题
清理DuckDB临时缓存
异常中断后DuckDB的临时缓存可能残留损坏状态,找到系统临时目录(Linux是/tmp,Windows是C:\Users\<用户名>\AppData\Local\Temp),删除所有以duckdb_开头的文件。重新初始化连接,规避旧缓存
改用ATTACH方式连接SQLite,避免复用损坏的缓存,示例代码:import duckdb # 先建立内存连接,再附加SQLite数据库 conn = duckdb.connect(database=':memory:') conn.execute("ATTACH '你的SQLite文件路径.db' AS sqlite_db (TYPE SQLITE, READ_ONLY);") # 执行查询 res = conn.execute("SELECT * FROM sqlite_db.目标表").fetchall()不要直接用
duckdb.connect('你的SQLite文件.db'),这种方式容易残留本地状态文件。检查并修复SQLite数据库完整性
用原生SQLite工具执行完整性检查:PRAGMA integrity_check;如果查出损坏,用备份恢复的方式最稳妥:
sqlite3 你的SQLite文件.db ".backup 备份文件.db"之后用备份文件重新连接。
升级DuckDB到最新版本
旧版DuckDB对SQLite的兼容性可能存在bug,执行升级:pip install --upgrade duckdb后续使用时确保连接正常回收
用上下文管理器包裹连接操作,避免异常中断时的资源泄漏:import duckdb with duckdb.connect() as conn: conn.execute("ATTACH '你的SQLite文件路径.db' AS sqlite_db (TYPE SQLITE, READ_ONLY);") results = conn.execute("SELECT * FROM sqlite_db.目标表").fetchall()
内容的提问来源于stack exchange,提问作者GlutenFreeJesus
相关产品推荐
相关产品推荐

