【发布时间】:2010-11-08 06:11:54
【问题描述】:
我正在运行 ubuntu 9.04 32b,并从 Synaptics 获得了 django。 我的 settings.py 是为 sqlite3 数据库配置的。
我已经通过这个tutorial 并在尝试运行命令python manage.py syncdb 时遇到以下错误:
有人知道我的问题吗?
【问题讨论】:
标签: django
我正在运行 ubuntu 9.04 32b,并从 Synaptics 获得了 django。 我的 settings.py 是为 sqlite3 数据库配置的。
我已经通过这个tutorial 并在尝试运行命令python manage.py syncdb 时遇到以下错误:
有人知道我的问题吗?
【问题讨论】:
标签: django
两天前我遇到了同样的问题。我通过将 DATABASE 字典(settings.py)中的“NAME”设置为绝对路径来解决它。 例如。
settings.py
DATABASES = {
'default' : {
'ENGINE' : 'django.db.backends.sqlite3',
'NAME' : DATABASE_PATH,
}
}
在这里你可以在 settings.py 的顶部设置 DATABASE_PATH (不确定这是否适用于 Windows)
SETTINGS_DIR = os.path.dirname(__file__)
PROJECT_PATH = os.path.abspath(os.path.join(SETTINGS_DIR, os.pardir))
DATABASE_PATH = os.path.abspath(os.path.join(PROJECT_PATH, 'your-database-name'))
对于 Windows,您可能必须使用替换方法。 (不确定..但你可以尝试如下)
PROJECT_PATH = os.path.abspath(os.path.join(SETTINGS_DIR, os.pardir).replace('\\', '/'))
DATABASE_PATH 也是如此。 PS。如果我错了,请纠正我。
【讨论】:
我遇到的问题是一个引导问题,在导入时(在任何类或函数之外)进行了一些模型查找。 Per the docs,这是个坏主意。
【讨论】:
如果您指定了 db 文件的完整路径,但仍有问题,请尝试在字符串前添加 r。
即。
r'C:\home\usr\mysite\sqlite3.db'
【讨论】:
'C:\\home\\usr\\mysite\\sqlite3.db' 会更好
与 user104264 的回答类似 - 不同的角度...
目前关注YouTube tutorial 我遇到了同样的错误。在我看来,在 virtualenv django 项目目录中运行 manage.py ...虚拟环境的路径 .../django_project/ 时,/myapp/settings.py 中的数据库名称只是“storage.db”所以
(django-v)...虚拟环境项目的路径.../django_project/>python manage.py syncdb
创建了...虚拟环境项目的路径.../django_project/storage.db
-比尔
【讨论】:
如果您的数据库名称与项目名称相同,也会发生这种情况。要修复它,只需更改数据库的名称,例如通过将 .db 添加到 NAME。因此,如果您在 settings.py 中的 DATABASE NAME 是“epic_project”,请将其更改为“epic_project.db”
冗长乏味的解释:
如果你通过运行开始你的项目:
django startproject epic_project
您的文件夹结构将如下所示:
如果然后在您的 settings.py 中将您的数据库设置为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'epic_project',
...
}
}
什么时候
python manage.py syncdb
运行它会尝试在 /path/to/epic_project/epic_project 打开或创建一个 sqlite db 文件,但是那里有一个目录,所以它说“哦,好的路径已经存在,让我们将它作为一个 sqlite db 打开” ,不幸的是对于 sqlite 它是一个目录而不是数据库,所以它会哭泣并且 django 将这些眼泪呈现给你“sqlite3.OperationalError:无法打开数据库文件”
【讨论】:
我在 Windows 上遇到了同样的问题,然后意识到如果指定的文件夹不存在,syncdb 将不会创建它。我在设置中指定了c:/mysite/db/sqlite3.db,但/db/ 文件夹不存在。在终端中创建它然后成功重新运行syncdb。
【讨论】:
为了谷歌:
数据库的路径必须是文件的完整路径 --- 而不仅仅是文件所在的目录。
【讨论】:
在 settings.py 中你使用的是 sqlite 文件的相对路径吗?
如果是,请尝试将其更改为绝对路径。
即而不是:
~/project/mydata.db
使用
/home/user/project/mydata.db
【讨论】:
可能是权限问题,您的用户是否有足够的权限在文件夹上写入?例如,如果你这样做
sudo python manage.py syncdb
相反,它有效吗?
【讨论】: