2012-04-19 59 views
33

我創建了一個簡單的django 1.4項目,並試圖發出syncdb來創建(postgres)數據庫模式。我得到這個錯誤: -「settings.DATABASES配置不當」錯誤執行syncdb與Django 1.4

Traceback (most recent call last): 
File "manage.py", line 10, in <module> 
execute_from_command_line(sys.argv) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 443, in execute_from_command_line 
utility.execute() 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/__init__.py", line 382, in execute 
self.fetch_command(subcommand).run_from_argv(self.argv) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 196, in run_from_argv 
self.execute(*args, **options.__dict__) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 232, in execute 
output = self.handle(*args, **options) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/base.py", line 371, in handle 
return self.handle_noargs(**options) 
File "/usr/local/lib/python2.6/dist-packages/django/core/management/commands/syncdb.py", line 57, in handle_noargs 
cursor = connection.cursor() 
File "/usr/local/lib/python2.6/dist-packages/django/db/backends/dummy/base.py", line 15, in complain 
raise ImproperlyConfigured("settings.DATABASES is improperly configured. " 
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured.Please supply the ENGINE value. Check settings documentation for more details. 

我的settings.py文件看起來像: -

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
     'NAME': 'test',      # Or path to database file if using sqlite3. 
     'USER': 'test',      # Not used with sqlite3. 
     'PASSWORD': 'test',     # Not used with sqlite3. 
     'HOST': '',      # Set to empty string for localhost. Not used with sqlite3. 
     'PORT': '',      # Set to empty string for default. Not used with sqlite3. 
    } 
} 

我可以使用PSQL OK連接到數據庫 - 任何想法?提前致謝 !

+4

「./manage.py diffsettings」輸出中的'DATABASES'行看起來像什麼? – okm 2012-04-19 13:37:54

+1

DATABASES = {'default':{'ENGINE':'django.db.backends。','NAME':'','HOST':'','USER':'','PASSWORD':'', '港口': ''}}。這看起來不正確? - 這怎麼解決? – bzo 2012-04-19 15:13:18

回答

22

這可能是因爲django沒有訪問您認爲它使用的settings.py文件。 嘗試顯式地使用--settings指向的Django您的設置文件

./manage.py --settings=nameofproject.settings runserver/syncdb 

如果一切正常的話,你就必須弄清楚爲什麼Django是輸入了錯誤的設置文件。

您是否意外升級到1.4?

+2

謝謝 - 所有修正。這是一個1.3 - > 1.4的升級問題。清理並重新安裝django,一切正常。 – bzo 2012-04-20 07:35:16

+1

另一個提示是使用以下命令檢查您的設置:echo $ DJANGO_SETTINGS_MODULE - 如果將其設置爲意外事件,則可能導致此錯誤。如果是這樣,你可以使用:DJANGO_SETTINGS_MODULE = nameofproject.settings ./manage來測試這個命令的設置。py runserver – RichVel 2013-03-30 12:44:13

+0

@Jonas請告訴我django 1.7的命令,因爲syncdb不起作用 – 2016-02-29 18:16:27

3

你更新了哪個settings.py文件?當我沒有讀到Django從1.3到1.4導致雙重導入的變化時,我也有同樣的問題。這是從https://docs.djangoproject.com/en/1.4/releases/1.4/#updated-default-project-layout-and-manage-py摘錄。最新版本的Django(當前爲1.4.2)提供了startproject management命令的更新的默認項目佈局和manage.py文件,並且默認項目佈局已更改。

要解決您的錯誤,您應該使用的正確settings.py文件不是主項目目錄中的那個,它是在項目目錄(具有相同名稱)內創建的目錄中的一個。

4

有你的項目中的兩個 'settings.py' 文件(如果你的操作系統是UNIX類):

  • 一是在第一DIR
  • 一是在DIR/DIR

您需要將ENGINE寫入第二個(dir/dir/setting.py)。

祝你好運!

12

對於我來說,我有一個類似的問題在Django 1.6剛纔:使用Heroku的PostgreSQL數據庫

背景

的Django 1.6 Heroku的項目,我想直接在PostgreSQL服務器上開發(所以不要複製「。postgresql_psycopg2" 位,如果你還沒有使用PostgreSQL)

  • 沒有問題,使用本地PSQL分貝
  • 明白了錯誤,當我註釋掉使用Heroku的DB

    DATABASES['default'] = dj_database_url.config(default=os.getenv('DATABASE_URL')) 
    
行發展

最初嘗試添加更多細節,如另一行,如

DATABASES['default']['ENGINE'] = 'django.db.backends.postgresql_psycopg2' 

雖然這不起作用,因爲那時錯誤向我詢問了NAME,它拒絕了。

SOLUTION

最終,這解決了這個問題:

  1. 我跑 「的Heroku配置」 看到我的個人資料提供給我,格式爲:

    postgres://user:[email protected]/dbname 
    
  2. 我更新了settings.py文件以反映這些細節:

    DATABASES = { 
        'default': { 
         'ENGINE': 'django.db.backends.postgresql_psycopg2', 
         'NAME': 'your_heroku_db_name',      
         'USER': 'your_heroku_db_user_name', 
         'PASSWORD': 'your_heroku_password', 
         'HOST': 'ec2-23-21-133-106.compute-1.amazonaws.com', # Or something like this 
         'PORT': '5432',      
        } 
    } 
    

    這提示是從https://stackoverflow.com/a/19719966/870121

    注:我的下一個計劃是抽象這些回.ENV變量,而不是讓他們看到在settings.py

  3. 然後我註釋掉晚的線,

    # DATABASES['default'] = dj_database_url.config(default=os.getenv('DATABASE_URL')) 
    

    所以DATABASES僅在settings.py文件

    這樣指定一次程序讀取連接到PostgreSQL Heroku上所需的一切分貝

    例如,現在python manage.py syncdb爲我工作


如果你想嘗試開發本地,註釋掉一切之上,而是設置你當地的postgresql服務器去並取消上面的本地等價物的註釋:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'NAME': 'cool01db', 
     'USER': '', 
     'PASSWORD': '', 
     'HOST': 'localhost', # '127.0.0.1' probably works also 
     'PORT': '5432', 
    } 
} 

這是來回m https://stackoverflow.com/a/25962586/870121

+0

謝謝,這對我非常有幫助! (在heroku上工作得很好,但不在本地......) – Hoff 2015-12-08 21:27:27

+0

heroku文檔太廣泛了,令人困惑 – 82din 2016-09-07 22:04:17