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

Google Colab读取上传的final_half.sqlite时遇DatabaseError求助

解决SQLite "database disk image is malformed" 错误

我碰到过好几次这个问题,大概率是数据库文件本身损坏或者上传/保存过程中出了岔子,给你几个可行的解决思路:

1. 先确认本地原始文件是否完好

这个错误最常见的原因是原始数据库文件本身就损坏了。你可以在本地用SQLite工具验证一下:

  • 打开终端,执行 sqlite3 final_half.sqlite 进入命令行
  • 输入 PRAGMA integrity_check; 并回车,如果返回 ok 说明本地文件没问题;如果返回错误信息,那你得先修复本地的数据库,再重新上传。

2. 检查Colab中的文件保存是否正确

你的上传代码看起来没问题,但可以调整一下,避免循环变量可能带来的潜在问题,同时验证文件完整性:

import pandas as pd
import sqlite3
from google.colab import files

# 上传文件
uploaded = files.upload()

# 确认文件名
filename = 'final_half.sqlite'
if filename not in uploaded:
    print(f"文件 {filename} 未上传成功!")
else:
    # 写入文件(确保覆盖或正确保存)
    with open(filename, 'wb') as f:
        f.write(uploaded[filename])
    print(f"已保存文件 {filename},大小:{len(uploaded[filename])} bytes")

    # 先验证数据库完整性
    con = sqlite3.connect(filename)
    cur = con.cursor()
    cur.execute("PRAGMA integrity_check;")
    check_result = cur.fetchone()[0]
    print(f"数据库完整性检查结果:{check_result}")

    if check_result == 'ok':
        # 再尝试查询数据
        try:
            # 先确认表是否存在
            cur.execute("SELECT name FROM sqlite_master WHERE type='table';")
            tables = cur.fetchall()
            print(f"数据库中的表:{[t[0] for t in tables]}")
            
            sorted_data = pd.read_sql_query("SELECT * FROM Reviews_half", con)
            print(f"成功读取数据,共 {len(sorted_data)} 行")
        except Exception as e:
            print(f"查询时出错:{e}")
    else:
        print("数据库文件已损坏,需要修复或重新上传")

3. 尝试修复Colab中的损坏数据库

如果完整性检查显示文件损坏,可以尝试用SQLite的内置命令修复:

方法1:使用VACUUM命令

con = sqlite3.connect('final_half.sqlite')
cur = con.cursor()
# 执行VACUUM重建数据库
cur.execute("VACUUM;")
con.commit()
# 再次检查完整性
cur.execute("PRAGMA integrity_check;")
print(cur.fetchone()[0])

方法2:导出数据到新数据库

如果VACUUM没用,可以尝试把可恢复的数据导出到新数据库:

# 连接损坏的数据库
broken_con = sqlite3.connect('final_half.sqlite')
# 创建新的数据库文件
fixed_con = sqlite3.connect('final_half_fixed.sqlite')

# 导出所有可读取的数据到新库
with broken_con:
    for line in broken_con.iterdump():
        try:
            fixed_con.execute(line)
        except Exception as e:
            print(f"跳过损坏的语句:{e}")
fixed_con.commit()

# 尝试用新数据库查询
sorted_data = pd.read_sql_query("SELECT * FROM Reviews_half", fixed_con)
print(f"成功读取修复后的数据,共 {len(sorted_data)} 行")

4. 重新上传文件

如果以上方法都没用,大概率是上传过程中网络波动导致文件不完整。你可以:

  • 重新压缩数据库文件(比如zip)后上传,避免传输中损坏
  • 上传后再次对比本地文件和Colab中文件的大小是否完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:55:59