问题:为什么我不能打开数据库?
信息:我正在开发一个目的不重要但使用sqlite3数据库的项目.我制作了一个测试程序,它运行并传递给它创建数据库的位置:
sqlite3
单元测试程序可以使db没问题.然后,我实际上使用该程序,将相同的位置传递给它,它说
OperationalError:无法打开数据库文件
我尝试过使用空数据库.与数据库单元测试留下,没有数据库.在所有三种情况下,我都会收到此错误.最令人沮丧的部分必须是单元测试可以做得很好,但实际的程序不能.
关于到底发生了什么的任何线索?
Don*_*ows 65
初步诊断:SQLite由于某种原因无法打开该文件.
检查明显的原因,并按照我建议的大致顺序检查:
/tmp完整?(你在Unix上,所以df /tmp用来查找.)/tmp/cer目录是否具有"奇数"权限?(SQLite需要能够在其中创建其他文件,以便处理提交日志之类的事情.)/tmp几乎总是在正确的排序FS的所以它可能不是-但它仍然不推荐)如果您不在同一台机器上,那么生产系统很可能没有/tmp/cer目录.显然要先解决这个问题.同样,如果您在同一台计算机上但以不同用户身份运行,则可能存在权限/所有权问题.磁盘空间是另一个严重的问题,但不太可能.我不认为这是最后三个,但是如果对更明显的部署问题进行排序,则值得检查.如果不是上述情况,你就会遇到一个异国情调的问题,并且必须报告更多的信息(它甚至可能是SQLite中的一个错误,但是知道它的开发者,我认为这是不太可能的).
小智 26
这对我有用:
conn = sqlite3.connect("C:\\users\\guest\\desktop\\example.db")
Run Code Online (Sandbox Code Playgroud)
注意:完整路径中的双斜线
在Win 7企业和Win Xp Pro上使用python v2.7
希望这有助于某人.
就我而言,我尝试在文件夹中创建 sqlite 数据库/tmp,并且从所有斜杠中我错过了一个斜杠
而不是sqlite:///tmp/mydb.sqlite-> sqlite:////tmp/mydb.sqlite...
一个原因可能是在与您为数据库指定的路径不匹配的路径中运行代码。例如,如果在您的代码中您有:
conn = lite.connect('folder_A/my_database.db')
Run Code Online (Sandbox Code Playgroud)
并且您在folder_A没有folder_A它的地方或其他地方运行代码会引发此类错误。原因是 SQLite 将创建数据库文件,如果它不存在而不是文件夹。
解决此问题的另一种方法可能是将您的连接命令包装在一个try-except表达式中,如果它引发sqlite3.OperationalError.
from os import mkdir import sqlite3 as lite
try:
conn = lite.connect('folder_A/my_database.db')
except lite.OperationalError:
mkdir('folder_A')
finally:
conn = lite.connect('folder_A/my_database.db')
Run Code Online (Sandbox Code Playgroud)