【问题标题】:Connecting Django web app database to postgresql on Pythonanywhere在 Pythonanywhere 上将 Django Web 应用程序数据库连接到 postgresql
【发布时间】:2016-08-18 07:05:05
【问题描述】:

我想将我的 Django Web 应用程序数据库连接到我的 Pythonanywhere 付费帐户上的 postgresql 数据库。在编码任何东西之前,我只是想让所有东西都能互相交谈。这是我的 django 应用程序中的 settings.py DATABASE 部分。我正在运行 Python 3.5 和 Django 1.9。

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

我们都从 pythonanywhere.com 站点的 DATABASE 和 Postgres 选项卡下提供了 HOST 和 PORT。我确实在 postgres 控制台上创建了我的数据库、用户名和密码。

然后我创建了一个 checkb.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

【问题讨论】:

  • 您是否检查过安装在 INSTALLED_APPS sttings 变量中的所有应用程序??

标签: python django database postgresql pythonanywhere


【解决方案1】:

您遇到的错误是因为您需要正确初始化 django 环境,然后才能针对它编写自定义脚本。

解决这个问题的最简单方法是运行一个已经加载了 django 配置的 python shell,你可以使用python manage.py shell 来做到这一点。

加载此 shell 后,输入您的代码,它会告诉您连接是否有效。

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2020-11-03
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 2013-06-05
      • 2017-07-07
      • 1970-01-01
      • 2014-11-26
      • 1970-01-01
      相关资源
      最近更新 更多