我正在运行ubuntu 9.04 32b并从Synaptics获得django . 我的settings.py是为sqlite3数据库配置的 .
我已经通过这个tutorial并在尝试运行命令_963735时遇到以下错误:
Traceback (most recent call last):
File "manage.py", line 11, in
execute_manager(settings)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 340, in execute_manager
utility.execute()
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 295, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 192, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 219, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 348, in handle
return self.handle_noargs(**options)
File "/usr/local/lib/python2.6/dist-packages/django/core/management/commands/syncdb.py", line 51, in handle_noargs
cursor = connection.cursor()
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/__init__.py", line 56, in cursor
cursor = self._cursor(settings)
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/sqlite3/base.py", line 145, in _cursor
self.connection = Database.connect(**kwargs)
sqlite3.OperationalError: unable to open database file
有人对我的问题有线索吗?
9 回答
我遇到的问题是一个引导问题,其中一些模型查找是在导入时完成的(在任何类或函数之外) . Per the docs,这是一个坏主意 .
在settings.py中,您使用的是sqlite文件的相对路径吗?
如果是,请尝试将其更改为绝对路径 .
即代替:
使用
如果您的数据库名称与项目名称相同,也会发生这种情况 . 要修复它,只需更改数据库的名称,例如通过向NAME添加.db . 因此,如果settings.py中的数据库名称为“epic_project”,请将其更改为“epic_project.db”
Long and boring explanation :
如果您通过运行启动项目:
你的文件夹结构将是这样的:
/ path / to / epic_project /
manage.py
epic_project /
settings.py
如果然后在您的settings.py中将数据库设置为:
什么时候
运行它试图在/ path / to / epic_project / epic_project打开或创建一个sqlite db文件,但是那里有一个目录,所以它说“哦,确定路径已经存在,让我们把它作为sqlite db打开”,不幸的是sqlite它是一个目录而不是数据库,所以它哭了,django将这些眼泪呈现为“sqlite3.OperationalError:无法打开数据库文件”
可能是权限问题,您的用户是否有足够的权利写入该文件夹?例如,如果你这样做
相反,它有效吗?
为了谷歌的缘故:
数据库的路径必须是文件的完整路径 - 而不仅仅是文件所在的目录 .
我在Windows上遇到了同样的问题然后意识到syncdb不会创建指定的文件夹,如果它还不存在 . 我在设置中指定了
c:/mysite/db/sqlite3.db
,但/db/
文件夹不存在 . 在终端中创建它然后成功重新运行syncdb .两天前我遇到了同样的问题 . 我通过将DATABASE字典(settings.py)中的'NAME'设置为绝对路径来解决它 . 例如 .
settings.py
在这里你可以设置在settings.py顶部的DATABASE_PATH(不确定这是否适用于Windows)
对于Windows,您可能必须使用replace方法 . (不确定..但你可以尝试如下)
DATABASE_PATH也是如此 . PS . 如果我错了,请纠正我 .
与user104264的回答相似 - 不同的视角......
目前跟随YouTube tutorial我有同样的错误 . 在virtualenv django项目目录中运行manage.py时似乎对我来说...虚拟环境的路径... / django_project /,/ myapp / setting.py里面的数据库名称只是'storage.db'所以
(django-v)...虚拟环境项目的路径... / django_project /> python manage.py syncdb
created ...虚拟环境项目的路径... / django_project / storage.db
-法案
如果要指定db文件的完整路径并且仍然存在问题,请尝试在字符串之前放置一个r .
即 .