在过去的几天里,我一直在试图解决这个错误。当我运行脚本时,我收到一个Django"操作错误:无法打开数据库文件"错误。从我在这个SO问题和这个类似的SO问题(以及许多Google搜索)上发现的,最常见的问题是有人使用相对路径而不是绝对路径,或者在其中一个字符串中有某种拼写错误。
以下是与我的路径相关的代码:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DATA_FILE = os.path.join(BASE_DIR, 'data', 'mydbtester.db')
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': DATA_FILE,
}
}
据我了解,...
上面的代码应该是从当前文件获取两个目录的目录的绝对路径,然后将其与data
目录以及数据库名称和文件扩展名连接起来。 我已经检查了这个文件是否存在,它确实存在于规定的位置;名称完全匹配。我也绝对确定当前用户对此文件具有权限。
我也无法migrate
数据库,出现完全相同的错误。
有谁知道为什么这会导致操作错误,或者是否还有其他事情发生?
注意:在 Docker 容器中运行时,我也遇到了这个问题。
非常感谢。
编辑:
在 DATA_FILE 声明下添加 print(DATA_FILE)
语句后,似乎BASE_DIR
在需要向上移动两个目录时只向上移动一个目录。要查看这是否是问题所在,我将data
目录向下移动了一个目录,然后它开始工作。但是,这不是我的项目应该构建的方式。有什么帮助可以让BASE_DIR
再引用一个目录吗?
第一个dirname
字面上获取文件所在的目录名称,而不是其父级。
您可能应该执行以下操作:
DATA_DIR = os.path.abspath(os.path.join(BASE_DIR, '..', 'data', 'mydbtester.db'))