2

目前正在处理 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', 

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

4

3 回答 3

4

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

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

您也可以只给它文件名:

    'NAME': 'data.sqlite',

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

最佳实践是传递一个绝对路径,但要确保这个绝对路径是相对于设置文件创建的。例如:

import os

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

然后是后者:

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

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

于 2012-05-29T21:50:45.523 回答
1

项目的 wiki 上有一个 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',请确保您db首先创建了 ' ' 目录。

确保您的/tmp目录是全局可写的(这是一个不太可能的原因,因为您系统上的其他东西也不起作用)。ls /tmp -ald应该产生drwxrwxrwt....

确保 中指定的数据库settings.py路径是完整路径。

如果您在 Windows 上工作,请确保您的 db 目录的路径用双反斜杠编写

'C:\\django\\sqlite\\django.db'
于 2012-05-30T00:29:33.283 回答
0

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

于 2012-05-29T22:44:40.100 回答