Django:无法打开数据库文件(这是路径名问题吗?



在过去的几天里,我一直在试图解决这个错误。当我运行脚本时,我收到一个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'))

最新更新