2010-07-19 81 views
32

我得到一個錯誤,提示「無法打開數據庫文件」。運行「python manage.py syncdb」後,Django「無法打開數據庫文件」

這裏是從我的settings.py的重要組成部分:

DATABASE_ENGINE = 'sqlite3' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
DATABASE_NAME = 'apps.db'  # Or path to database file if using sqlite3. 
DATABASE_USER = ''    # Not used with sqlite3. 
DATABASE_PASSWORD = ''   # Not used with sqlite3. 
DATABASE_HOST = ''    # Set to empty string for localhost. Not used with sqlite3. 
DATABASE_PORT = ''    # Set to empty string for default. Not used with sqlite3. 

這裏是 「apps.db」 的權限:

-rw-r--r-- 1 root root 33792 19. Jul 10:51 apps.db 

我的Django的服務器是Apache叫..我不知道是否有做的權限,但改變apps.db的老闆「WWW的數據」沒工作,要麼

[編輯]

確保www數據可以訪問所有這一切,我做了以下內容:

做了以下內容:

chown -R www-data apps 
rm apps.db 
su www-data 
python manage.py syncdb 

,但它仍然無法正常工作:(

+0

確保WWW的數據可以遍歷整個路徑到你的數據庫,而不是僅僅讀/寫入db文件。 – 2010-07-19 11:11:29

回答

16

我通過改變解決了這個錯誤將DATABASE_NAME改爲絕對路徑:/var/www/apps/apps.db

在Windows機器上,反斜槓應該像下面這樣轉義出來:C:\\path\\to\\database\\database_name.db

+0

如果我試圖通過網絡訪問數據庫,路徑以「\\ MyMachine \ ...」開頭,路徑轉換爲「\\\\ MyMachine \\ ...」。然後我無法打開連接,我得到「無法打開數據庫文件」。即使數據庫在我的機器上,我只是試圖以不同的方式訪問它。 – gajo357 2014-03-11 10:16:46

45

Solution from NewbieMistakes

確保阿帕奇也可以寫信給 數據庫的父目錄。 SQLite需要能夠寫入這個目錄。

確保數據庫文件的完整路徑的每個文件夾都不會以數字開頭 ,例如。/www/4myweb/db(在Windows 2000上觀察)。

如果DATABASE_NAME設置爲類似 '/用戶/提供yourname /網站/ mydjangoproject /的db/db',確保你已經 創建的 'DB' 目錄第一。

確保你的/ tmp目錄是世界可寫的(一個不太可能的原因,因爲 系統上的其他東西也不起作用)。 ls/tmp -ald應該生成drwxrwxrwt的 ....

確保settings.py中指定的數據庫路徑是完整的 路徑。

+14

父目錄權限不明顯(對我而言);謝謝。 – 2013-04-02 22:42:10

+1

還有一個FAQ條目[這裏](https://code.djangoproject.com/wiki/NewbieMistakes#DjangosaysUnabletoOpenDatabaseFilewhenusingSQLite3)。 – m01 2013-08-06 06:51:14

3

DATABASE_NAME已棄用。您必須使用當前支持的格式。 即

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.sqlite3', 
    'NAME': 'C:/ispdb.sqlite', 
    'USER': '', 
    'PASSWORD': '', 
    'HOST': '', 
    'PORT': '' 

} 

而且也看到這是從Django的網站棄用其他設置。:))

1

好吧,我回答了這個問題。 http://goo.gl/KAuXz

我面臨完全相同的問題。這是我的設置工作。

'ENGINE': 'django.db.backends.sqlite3', 
'NAME': '/home/neo/django/db/data.sqlite3' 

在sqlite3的情況下,其他設置將是相同/默認。

2

對於我的Linux系統,我不得不放棄進程所有者寫權限既db.sqlite3和包含它的目錄!您可以改爲setfacl!例如:(https://serverfault.com/questions/484818/best-way-to-set-up-permissions-with-nginx-php-fpm-on-shared-hosting)。

(py2.7)[我@服務器djangoproject容器] $ LS -la djangoproject/

drwxrwxr-x. 6 root nginx 4096 Jun 14 01:05 . 
drwxr-xr-x. 6 root root 4096 Jun 13 23:47 .. 
-rwxrwxrwx. 1 root nginx 49152 Jun 14 01:05 db.sqlite3 
相關問題