Sqlite3, OperationalError: 无法打开数据库文件

新手上路,请多包涵

问:为什么我打不开数据库?


信息:我正在使用 sqlite3 数据库进行项目。我写了一个测试程序运行并传递给数据库:

/tmp/cer/could.db

单元测试程序可以使 db 没有任何问题。但是,当我实际使用将相同位置传递给它的程序时,出现以下错误:

OperationalError:无法打开数据库文件

我试过这样做:

 1) an empty database.
2) the database and the unit test left behind.
3) no database at all.

在三种情况下,我得到了上述错误。最令人沮丧的部分必须是 unittest 可以做得很好,但实际程序不能。

关于到底发生了什么的任何线索?

原文由 Narcolapser 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 951
2 个回答

初步诊断:SQLite 由于某种原因无法打开该文件。

检查明显的原因,并按照我建议检查的大致顺序:

  • 该程序是否与您正在测试的机器在同一台机器上运行?
  • 它是否像您一样运行(或者至少与您正在测试它的用户相同)?
  • 包含 /tmp 的磁盘是否已满? (你在 Unix 上,所以使用 df /tmp 来找出答案。)
  • /tmp/cer 目录是否具有“奇数”权限? (SQLite 需要能够在其中创建额外的文件,以便处理诸如提交日志之类的事情。)
  • 单元测试代码是否仍在使用该数据库? (使用足够现代的 SQLite 并且在正确的文件系统中并发打开 可能的 - 尽管 /tmp 实际上总是在正确的 FS 类型上,所以它可能不是那样 - 但仍然不推荐。)
  • 开发代码 真的 在尝试写入该数据库,还是某些“聪明”的东西抓住了您并导致它尝试打开其他东西? (过去我在我的代码中遇到过这个问题;不要认为它不会发生在你身上……)
  • 您是否在单元测试和生产代码中使用了相同版本的 SQLite 库?

如果您不在同一台机器上,生产系统很可能没有 /tmp/cer 目录。很明显要先解决这个问题。同样,如果您在同一台机器上但以不同的用户身份运行,您很可能会遇到权限/所有权问题。磁盘空间是另一个严重问题,但可能性较小。我不认为这是最后三个,但如果更明显的部署问题得到解决,它们值得检查。如果以上都不是,那么你遇到了一个奇异的问题并且将不得不报告更多信息(它甚至可能是 SQLite 中的一个错误,但了解它的开发人员,我相信这是不太可能的)。

原文由 Donal Fellows 发布,翻译遵循 CC BY-SA 2.5 许可协议

这对我有用:

 conn = sqlite3.connect("C:\\users\\guest\\desktop\\example.db")

注意:完整路径中的双斜杠

在 Win 7 企业版和 Win Xp Pro 上使用 python v2.7

希望这对某人有帮助。

原文由 jhc 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题