Django:无法打开数据库文件(这是路径名问题吗?)
Posted
技术标签:
【中文标题】Django:无法打开数据库文件(这是路径名问题吗?)【英文标题】:Django: unable to open database file (is this a pathname issue?) 【发布时间】:2016-05-29 06:32:39 【问题描述】:在过去的几天里,我一直在尝试解决这个错误。当我运行我的脚本时,我收到了 Django“OperationalError:无法打开数据库文件”错误。 根据我在 this SO question 和 this similar SO question(以及许多 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
数据库,出现完全相同的错误。
有谁知道为什么会导致 OperationalError,或者是否还有其他原因?
注意:我在 Docker 容器中运行时也遇到了这个问题。
非常感谢。
编辑:
在 DATA_FILE 声明下添加print(DATA_FILE)
语句后,BASE_DIR
似乎只在需要上移两个目录时才上移一个目录。为了查看这是否是问题所在,我将data
目录下移了一个目录,然后它就开始工作了。 然而,这不是我的项目的结构方式。有什么帮助可以让BASE_DIR
再引用一个目录吗?
【问题讨论】:
你能在print DATA_FILE
那里看看是不是你所期望的吗?
@DanielRoseman 如果我在那里添加print(DATA_FILE)
行,它会打印两次DATA_FILE
的路径,然后决定再次中断。
但是路径正确吗?
天哪。不,实际上。我什至没有注意到这一点。似乎它只是向上移动一个目录而不是BASE_DIR
行中的两个。有什么想法吗?
【参考方案1】:
第一个dirname
从字面上获取文件所在的目录名称,而不是其父目录。
你可能应该这样做:
DATA_DIR = os.path.abspath(os.path.join(BASE_DIR, '..', 'data', 'mydbtester.db'))
【讨论】:
完美,这在将文件移回之前的位置后有效。谢谢!以上是关于Django:无法打开数据库文件(这是路径名问题吗?)的主要内容,如果未能解决你的问题,请参考以下文章