Django初学者问题:manage.py dbsync

12 django

我正在运行ubuntu 9.04 32b并从Synaptics获得django.我的settings.py是为sqlite3数据库配置的.

我一直在阅读本教程,并在尝试运行命令时遇到以下错误python manage.py syncdb:

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

有人对我的问题有线索吗?

Jos*_*sad 21

在settings.py中,您使用的是sqlite文件的相对路径吗?

如果是,请尝试将其更改为绝对路径.

即代替:

~/project/mydata.db
Run Code Online (Sandbox Code Playgroud)

使用

/home/user/project/mydata.db
Run Code Online (Sandbox Code Playgroud)

  • 这几乎总是问题所在.Python在读取这些内容时不会进行路径扩展. (2认同)

Job*_*Job 17

如果您的数据库名称与项目名称相同,也会发生这种情况.要修复它,只需更改数据库的名称,例如通过向NAME添加.db.因此,如果settings.py中的数据库名称为"epic_project",请将其更改为"epic_project.db"


漫长无聊的解释:

如果您通过运行启动项目:

django startproject epic_project
Run Code Online (Sandbox Code Playgroud)

你的文件夹结构将是这样的:

  • /路径/到/ epic_project/
    • manage.py
    • epic_project/
      • settings.py

如果然后在您的settings.py中将数据库设置为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'epic_project',
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

什么时候

python manage.py syncdb 
Run Code Online (Sandbox Code Playgroud)

运行它试图在/ path/to/epic_project/epic_project打开或创建一个sqlite db文件,但是那里有一个目录,所以它说"哦,确定路径已经存在,让我们把它作为sqlite db打开",不幸的是sqlite它是一个目录而不是数据库,所以它哭了,django将这些眼泪呈现为"sqlite3.OperationalError:无法打开数据库文件"


osc*_*kuo 9

可能是权限问题,您的用户是否有足够的权限写入该文件夹?例如,如果你这样做

sudo python manage.py syncdb
Run Code Online (Sandbox Code Playgroud)

相反,它有效吗?


Raj*_*Raj 5

为了谷歌的缘故:

数据库的路径必须是文件的完整路径 - 而不仅仅是文件所在的目录.