2016-04-25 121 views
2

我想將我的Django網絡應用程序數據庫連接到我的postgresql數據庫我已經在我的Pythonanywhere付費帳戶上。在編寫任何代碼之前,我只是想讓所有的事情都彼此交談。這是我的django應用程序中的settings.py DATABASE部分。我正在運行Python 3.5和Django 1.9。將Django的Web應用程序數據庫連接到Pythonanywhere上的postgresql

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.postgresql', 
    'NAME': '[myDatabaseName]', 
    'USER': '[myUsername]', 
    'PASSWORD': '[myPassword]', 
    'HOST': 'xxxxxxxx-xxx.postgres.pythonanywhere-services.com', 
    'PORT': '10130', 
    } 
} 

HOST和PORT我​​們都是從pythonanywhere.com網站的DATABASE和Postgres標籤下提供的。我確實在postgres控制檯上創建了我的數據庫,用戶名和密碼。

然後我創建了一個checkedb.py腳本,我發現它會檢查與postgres數據庫的連接是否工作。

from django.db import connections 
db_conn = connections['default'] 
try: 
    c = db_conn.cursor() 
except OperationalError: 
    connected = False 
else: 
    connected = True 

這是運行此代碼後收到的錯誤。

Traceback (most recent call last): 
    File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 38, in _setup 
    settings_module = os.environ[ENVIRONMENT_VARIABLE] 
    File "/usr/lib/python3.4/os.py", line 633, in __getitem__ 
    raise KeyError(key) from None 
KeyError: 'DJANGO_SETTINGS_MODULE' 
During handling of the above exception, another exception occurred: 
Traceback (most recent call last): 
    File "/home/giraldez/golf/golf/dbcheck.py", line 2, in <module> 
    db_conn = connections['default'] 
    File "/usr/local/lib/python3.4/dist-packages/django/db/utils.py", line 196, in __getitem__ 
    self.ensure_defaults(alias) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/utils.py", line 170, in ensure_defaults 
    conn = self.databases[alias] 
    File "/usr/local/lib/python3.4/dist-packages/django/utils/functional.py", line 49, in __get__ 
    res = instance.__dict__[self.func.__name__] = self.func(instance) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/utils.py", line 153, in databases 
    self._databases = settings.DATABASES 
    File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 54, in __getattr__ 
    self._setup(name) 
    File "/usr/local/lib/python3.4/dist-packages/django/conf/__init__.py", line 47, in _setup 
    % (desc, ENVIRONMENT_VARIABLE)) 
django.core.exceptions.ImproperlyConfigured: Requested setting DATABASES, but settings are not configured. You must either define the environment variable D 
JANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 

爲我的項目目錄看起來像這樣

golf/ 
---golf/ 
------__init.py__ 
------dbcheck.py 
------settings.py 
------urls.py 
------wsgi.py 
---media/ 
---static/ 
---manage.py 
+0

您是否已檢查安裝的所有應用程序都包含在INSTALLED_APPS sttings變量中? – 2016-04-25 05:37:11

回答

2

你,如果你正在使用它作爲一個獨立的腳本需要設置Django的第一。 ./manage.py shell會更容易嘗試。但如果你想有一個獨立的腳本來測試,這裏有雲:

import sys,os 

if __name__ == '__main__': # pragma nocover 
    # Setup environ 
    sys.path.append(os.getcwd()) 

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings_dev") 
    import django 
    django.setup() 

from django.db import connections 
db_conn = connections['default'] 
try: 
    c = db_conn.cursor() 
except OperationalError: 
    connected = False 
else: 
    connected = True 
1

你所得到的錯誤是因爲您需要正確初始化Django的環境之前,你可以對着它編寫自定義腳本。

解決此問題的最簡單方法是運行已加載django配置的python shell,您可以使用python manage.py shell執行此操作。

一旦這個shell已經加載,輸入你的代碼,它應該告訴你連接是否有效。

相關問題