Django新手:python manage.py syncdb错误?

时间:2012-05-29 21:48:13

标签: django sqlite

目前正在处理Django教程并在我尝试时遇到此错误:

python manage.py syncdb

使用sqlite3

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 443, in execute_from_command_line
    utility.execute()
  File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)
  File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 371, in handle
    return self.handle_noargs(**options)
  File "/Library/Python/2.6/site-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs
    cursor = connection.cursor()
  File "/Library/Python/2.6/site-packages/django/db/backends/__init__.py", line 306, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/Library/Python/2.6/site-packages/django/db/backends/sqlite3/base.py", line 281, in _cursor
    self._sqlite_create_connection()
  File "/Library/Python/2.6/site-packages/django/db/backends/sqlite3/base.py", line 271, in _sqlite_create_connection
    self.connection = Database.connect(**kwargs)
sqlite3.OperationalError: unable to open database file

我的settings.py文件显示为:

        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '/Users/username/django_tutorial/mysite', 

有人知道这里的问题吗?好像我正在放入完整的文件目录,但数据库仍然无法创建? ):

3 个答案:

答案 0 :(得分:4)

您应该使用文件的路径,包括文件名:

    'NAME': '/Users/username/django_tutorial/mysite/data.sqlite', 

你也可以给它一个文件名:

    'NAME': 'data.sqlite',

在这种情况下,它将在与运行manage.py的目录相同的目录中创建。

最佳做法是传递绝对路径,但要确保相对于设置文件创建此绝对路径。 E.G:

import os

SETTINGS_DIR = os.path.dirname(os.path.abspath(__file__))

然后是后者:

    'NAME': os.path.join(SETTINGS_DIR, 'data.sqlite'),

请记住,设置文件是一个Python文件,您可以在其中使用Python代码。

答案 1 :(得分:1)

项目维基上有一个Django新手错误列表。请参阅此条目:https://code.djangoproject.com/wiki/NewbieMistakes#DjangosaysUnabletoOpenDatabaseFilewhenusingSQLite3

这个特定错误是Django新手的常见错误。请参阅下面的详细说明。

  

问题

     

您正在使用SQLite3,您的DATABASE_NAME设置为   数据库文件的完整路径,数据库文件可由Apache写入,   但你仍然得到上述错误。

     

<强>解

     

确保Apache也可以写入父目录   数据库。 SQLite需要能够写入此目录。

     

确保数据库文件的完整路径中的每个文件夹都无法启动   与数字,例如。 /www/4myweb/db(在Windows 2000上观察到)。

     

如果DATABASE_NAME设置为类似的话   '/Users/yourname/Sites/mydjangoproject/db/db',请确保您   创造了&#39; db&#39;目录优先。

     

确保您的/tmp目录是全球可写的(不太可能是因为   你系统上的其他东西也行不通)。 ls /tmp -ald应该   产生drwxrwxrwt ....

     

确保settings.py中指定的数据库路径已满   路径。

     

如果你在Windows上工作,也要确保你有路径   用双反斜杠写的db目录

'C:\\django\\sqlite\\django.db'

答案 2 :(得分:0)

我认为你不需要名称的完整路径,只需输入文件名即“my_db.db”即可。假设您已安装sqlite3。