Django数据库连接错误

7

我在“python manage.py shell”中运行了以下代码:

from django.db import connection
cursor = connection.cursor()

但是得到了以下错误:
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/__init__.py", line 306, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/postgresql_psycopg2/base.py", line 177, in _cursor
    self.connection = Database.connect(**conn_params)
  File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 179, in connect
    connection_factory=connection_factory, async=async)
OperationalError: FATAL:  role "jay" does not exist

在 settings.py 文件中,我有以下内容:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', 
        'NAME': 'mysite',                     
        'USER': '',                     
        'PASSWORD': '',                  
        'HOST': '',                      
        'PORT': '',                     
    }
}

我在这里做错了什么?我安装了postgresql和适配器。

2个回答

11

致命错误:角色 "jay" 不存在

由于USER为空,它正在使用您本地计算机用户名(jay),而您尚未创建该名称的PostgreSQL用户。

请尝试:

psql -u postgres createuser -P jay
您可能需要将在提示符处输入的密码放入settings.py中,除非您的pg_hba.conf使用ident作为认证方法。

在Debian的9.4beta3版本中,命令应该是:sudo su - postgres -c "createuser -P jay"当然也可以使用psql来完成,但是-u应该改为-U,而且我还遇到了其他错误。 - jcomeau_ictx
2
@jcomeau_ictx,你永远不需要使用sudo su -。使用sudo -u postgres即可。同样的效果,没有繁琐的引用。 - Craig Ringer

1

由于您没有提供用户名,PostgreSQL正在使用运行Django的操作系统用户的用户名来连接数据库。您收到的错误提示说该用户(jay)在数据库中未定义。

一个可能的解决方案是提供mysite数据库所有者的用户名和密码。还要将localhost添加为主机,以确保PostgreSQL使用用户/密码身份验证,而不是使用拥有Django进程的用户名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接