2012-05-29 76 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' 
相關問題