2012-05-29 113 views
2

在眼下Django的教程工作,并得到了这个错误,当我尝试:中使用sqlite3Django新手:python manage.py syncdb错误?

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文件

python manage.py syncdb 

写着:

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

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

+0

写的 db目录你在你的系统中有源码版本3? –

回答

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代码。

+0

我不认为完整的路径实际上是需要它的工作。如果您将名称设置为“db”,则会在当前项目位置创建它。 – jdi

+0

我假设SQLite数据库文件是自动创建的? – zhuyxn

+0

@zhuyxn:不,你需要告诉它什么来命名数据库文件。你可以有多个sqlite数据库。它需要知道使用哪一个。 – jdi

0

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

1

项目wiki上有Django新手错误列表。看到这个条目:https://code.djangoproject.com/wiki/NewbieMistakes#DjangosaysUnabletoOpenDatabaseFilewhenusingSQLite3

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

问题

您使用的SQLite3,您DATABASE_NAME设置为 数据库文件的完整路径,数据库文件是可写的了Apache, 但仍然出现上述错误。

SOLUTION

确保阿帕奇还可以写入的 数据库中的父目录。 SQLite需要能够写入这个目录。

确保数据库文件的完整路径的每个文件夹都不会以数字开头 ,例如。 /www/4myweb/db(在Windows 2000上观察)。

如果DATABASE_NAME被设置成类似 '/Users/yourname/Sites/mydjangoproject/db/db',确保你已经 创作的“db”目录第一。

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

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

如果在Windows上工作的同时也要确保你有路径与双齿隙

'C:\\django\\sqlite\\django.db' 
相关问题