Django初学者问题:manage.py dbsync
Posted
技术标签:
【中文标题】Django初学者问题:manage.py dbsync【英文标题】:Django beginner problem: manage.py dbsync 【发布时间】:2010-11-08 06:11:54 【问题描述】:我正在运行 ubuntu 9.04 32b,并从 Synaptics 获得了 django。 我的 settings.py 是为 sqlite3 数据库配置的。
我已经通过这个tutorial 并在尝试运行命令python manage.py syncdb
时遇到以下错误:
有人知道我的问题吗?
【问题讨论】:
【参考方案1】:两天前我遇到了同样的问题。我通过将 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。如果我错了,请纠正我。
【讨论】:
【参考方案2】:我遇到的问题是一个引导问题,在导入时(在任何类或函数之外)进行了一些模型查找。 Per the docs,这是个坏主意。
【讨论】:
【参考方案3】:如果您指定了 db 文件的完整路径,但仍有问题,请尝试在字符串前添加 r。
即。
r'C:\home\usr\mysite\sqlite3.db'
【讨论】:
这表示正则表达式,但您要解决的问题是 Python 不喜欢单个反斜杠。使用'C:\\home\\usr\\mysite\\sqlite3.db'
会更好
@Tom 它并不表示正则表达式。它告诉 python 将其视为 原始字符串文字:***.com/a/2081708/2259303
呃,我的错。我使用它的 99% 时间都是用于 Django url,所以我已经把它卡在了我的脑海里。对不起。【参考方案4】:
与 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
-比尔
【讨论】:
【参考方案5】:如果您的数据库名称与项目名称相同,也会发生这种情况。要修复它,只需更改数据库的名称,例如通过将 .db 添加到 NAME。因此,如果您在 settings.py 中的 DATABASE NAME 是“epic_project”,请将其更改为“epic_project.db”
冗长乏味的解释:
如果你通过运行开始你的项目:
django startproject epic_project
您的文件夹结构将如下所示:
/path/to/epic_project/ manage.py epic_project/ settings.py如果然后在您的 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:无法打开数据库文件”
【讨论】:
幽默加 1【参考方案6】:我在 Windows 上遇到了同样的问题,然后意识到如果指定的文件夹不存在,syncdb 将不会创建它。我在设置中指定了c:/mysite/db/sqlite3.db
,但/db/
文件夹不存在。在终端中创建它然后成功重新运行syncdb。
【讨论】:
【参考方案7】:为了谷歌:
数据库的路径必须是文件的完整路径 --- 而不仅仅是文件所在的目录。
【讨论】:
这不是 JosefAssad 在their answer 中建议的吗?【参考方案8】:在 settings.py 中你使用的是 sqlite 文件的相对路径吗?
如果是,请尝试将其更改为绝对路径。
即而不是:
~/project/mydata.db
使用
/home/user/project/mydata.db
【讨论】:
这几乎总是问题所在。 Python 在读取这些文件时不会进行路径扩展。【参考方案9】:可能是权限问题,您的用户是否有足够的权限在文件夹上写入?例如,如果你这样做
sudo python manage.py syncdb
相反,它有效吗?
【讨论】:
以上是关于Django初学者问题:manage.py dbsync的主要内容,如果未能解决你的问题,请参考以下文章
Django 命令行工具django-admin.py与manage.py
什么时候应该使用 django-admin.py 和 manage.py?
为啥 Django 应用程序需要 `manage.py` 而不是使用 `__init__ py`?
Django 中 python manage.py makemigrations 与 python manage.py migrate