问:为什么我打不开数据库?
信息:我正在使用 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 许可协议
初步诊断:SQLite 由于某种原因无法打开该文件。
检查明显的原因,并按照我建议检查的大致顺序:
/tmp
的磁盘是否已满? (你在 Unix 上,所以使用df /tmp
来找出答案。)/tmp/cer
目录是否具有“奇数”权限? (SQLite 需要能够在其中创建额外的文件,以便处理诸如提交日志之类的事情。)/tmp
实际上总是在正确的 FS 类型上,所以它可能不是那样 - 但仍然不推荐。)如果您不在同一台机器上,生产系统很可能没有
/tmp/cer
目录。很明显要先解决这个问题。同样,如果您在同一台机器上但以不同的用户身份运行,您很可能会遇到权限/所有权问题。磁盘空间是另一个严重问题,但可能性较小。我不认为这是最后三个,但如果更明显的部署问题得到解决,它们值得检查。如果以上都不是,那么你遇到了一个奇异的问题并且将不得不报告更多信息(它甚至可能是 SQLite 中的一个错误,但了解它的开发人员,我相信这是不太可能的)。