【问题标题】:Django fe_sendauth: no password supplied error, unable to connect to postgres databaseDjango fe_sendauth:没有提供密码错误,无法连接到 postgres 数据库
【发布时间】:2017-05-12 04:56:52
【问题描述】:

我正在尝试使用 django applciation 以 postgresql 作为其后端来配置服务器。在我尝试运行迁移时安装所需的包、数据库和环境后,我收到以下错误

Traceback (most recent call last):
  File "/var/envs/traveldbapi/lib/python3.4/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
    self.connect()
  File "/var/envs/traveldbapi/lib/python3.4/site-packages/django/db/backends/base/base.py", line 189, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/var/envs/traveldbapi/lib/python3.4/site-packages/django/db/backends/postgresql/base.py", line 176, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/var/envs/traveldbapi/lib/python3.4/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: fe_sendauth: no password supplied


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/var/envs/traveldbapi/lib/python3.4/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line
    utility.execute()
 ====
 ommitting some lines
 ====
    connection = Database.connect(**conn_params)
  File "/var/envs/traveldbapi/lib/python3.4/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
django.db.utils.OperationalError: fe_sendauth: no password supplied

我确认存在 django 所需的相关 DATABASE 设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': 'localhost',
        'NAME': DATABASE_NAME,
        'USER': DATABASE_USER,
        'password': DATABASE_PASSWORD
    }
}

我不确定为什么会发生此错误,因为这是我在本地计算机上使用的相同设置,并且可以正常工作。为了确认我的pg_hba.conf 没有任何问题,我从全新安装开始。配置未以任何方式修改,应用程序用户对应用程序数据库具有所需的权限。

【问题讨论】:

  • 表示 DATABASE_PASSWORD = '****' 您的设置文件中有这样的内容吗?所以这意味着 django 没有得到密码
  • 是的,将密码字段设为大写,例如 PASSWORD : YOUR PASSWORD

标签: python django postgresql


【解决方案1】:

设置必须为大写 - 尝试将其更改为 'PASSWORD'

【讨论】:

    【解决方案2】:

    密钥名称'password'应为大写'PASSWORD'。此外,您可以使用 .bashrc 文件来保存安全信息,而不是将密码定义为全局变量 DATABASE_PASSWORD,并且可以像 os.environ['DATABASE_PASSWORD']

    一样在 settings.py 中获取

    【讨论】:

    • 我实际上有一个名为env_settings.py 的单独文件,其中包含构建时生成的所有秘密。
    【解决方案3】:

    将您的 HOST 变量设为空

    'HOST': '',
    

    【讨论】:

      【解决方案4】:

      OperationalError:fe_sendauth:未提供密码

      你应该把密码改成大写'PASSWORD'

      【讨论】:

        【解决方案5】:

        在使用 Django 时,请确保您有一个 .env 文件并正确配置您的 .postgres 和 .django envs 尤其是在您的 .postres 或 .env 文件中提供数据库 URL:

        DATABASE_URL=psql://postgres:yourpassword@127.0.0.1:5432/databasename
        POSTGRES_HOST=*
        POSTGRES_PORT=5432
        POSTGRES_DB=tutor
        POSTGRES_USER=postgres
        POSTGRES_PASSWORD=yourpassword
        DJANGO_ALLOWED_HOSTS=['.herokuapp.com', 'localhost', '127.0.0.1', '[::1]', '0.0.0.0']
        # DJANGO_DEBUG=False # disable debugging on production
        DJANGO_DEBUG=False # disable debugging if hosts list is not empty
        

        有关环境变量的更多信息,请参阅:# .env using django-environ

        【讨论】:

          猜你喜欢
          • 2016-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-29
          • 2020-06-12
          • 1970-01-01
          • 2016-10-15
          • 2017-09-18
          相关资源
          最近更新 更多