操作错误:致命错误:数据库 "django" 不存在。

24

我是一个数据库小白,正在为我的django项目设置PostgreSQL。为此我也使用了psycopg2。但是数据库很复杂。个人而言,我希望能有一种方式在一个地方获取所有我的数据库和用户设置/信息。这样我就知道要连接到哪里以及如何连接(因为我仍在本地运行,所以没有安全问题吗?)。

然而,似乎我没有创建这个数据库的“权限”,即使我连接到标准的“管理员”用户“postgres”。使用我在安装时输入的密码(“pw123”)。

Django项目(settings.py):

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'django',                      
        'USER': 'postgres',
        'PASSWORD': 'pw123',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

CMD -> python manage.py shell (在导入 django.db connection 后)

>>> cursor = connection.cursor()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Python27\lib\site-packages\django\db\backends\__init__.py", line 165, in cursor
    cursor = self.make_debug_cursor(self._cursor())
  File "C:\Python27\lib\site-packages\django\db\backends\__init__.py", line 138, in _cursor
    self.ensure_connection()
  File "C:\Python27\lib\site-packages\django\db\backends\__init__.py", line 133, in ensure_connection
    self.connect()
  File "C:\Python27\lib\site-packages\django\db\utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "C:\Python27\lib\site-packages\django\db\backends\__init__.py", line 133, in ensure_connection
    self.connect()
  File "C:\Python27\lib\site-packages\django\db\backends\__init__.py", line 122, in connect
    self.connection = self.get_new_connection(conn_params)
  File "C:\Python27\lib\site-packages\django\db\backends\postgresql_psycopg2\base.py", line 134, in get_new_connection
    return Database.connect(**conn_params)
  File "C:\Python27\lib\site-packages\psycopg2-2.5.4-py2.7-win32.egg\psycopg2\__init__.py", line 164, in connect
    conn = _connect(dsn, connection_factory=connection_factory, async=async)
OperationalError: FATAL:  database "django" does not exist

我在安装过程中做错了什么吗?我能纠正吗?我应该考虑重新安装所有东西吗?那我该怎么做呢?数据库让我感到困惑:P


5
你必须先创建数据库。 - Hasan Ramezani
是的,但是怎么做呢?此外,我认为如果我没有一个数据库,这种方法会创建一个.. 我不是通过这样做来创建名为“django”的数据库吗,因为这就是我想要的(!?) :P - howtopythonpls
1
“首先创建数据库”不是一个答案。Django应该为您创建数据库。 - Ryan Glenn
4个回答

36

PostgreSQL首次连接时不会自动创建数据库,您必须在使用它之前创建一个数据库。

通过PgAdmin-III或命令行psql客户端连接到PostgreSQL(通常连接管理数据库,名为'postgres'),并创建数据库django。从PgAdmin-III可以通过菜单完成此操作;从psql中,您可以使用SQL命令CREATE DATABASE来完成。

另请参见手册中的创建PostgreSQL数据库和这篇教程 我在5秒钟的谷歌搜索中找到的看起来不完全错误的教程

我的建议是使用psql连接(可以在“开始”菜单中找到)作为“postgres”用户,并使用您在安装时设置的密码,然后执行以下操作:

CREATE USER django WITH PASSWORD 'somepassword';

CREATE DATABASE django WITH OWNER django ENCODING 'utf-8';

我不知道psql是一个命令提示符,现在我明白了所有的命令都在哪里。抱歉我用的是Windows 8。我会尝试一下的!谢谢! - howtopythonpls
@howtopythonpls 如果它不在默认路径中,除非你更改了PATH,否则你需要像这样使用 %PROGRAMFILES%\PostgreSQL\9.3\bin\psql 直接从命令提示符中声明。或者你可以使用开始菜单中的条目来打开它。 - Craig Ringer
用户不应该手动创建数据库...什么鬼?Ruby on Rails可以通过 rails db:create 自动化处理,并可在所有数据库类型上工作。 - Ryan Glenn

6

我找到了类似的指南,但是什么是“sudo”?我正在Windows上运行,这仍然可能吗? - howtopythonpls
@howtopythonpls 使用sudo是Unix/Linux特有的,它指的是PostgreSQL在Linux上使用的默认身份验证模式。在Windows上,默认情况下使用密码身份验证,因此您不需要也不能使用'sudo'或其Windows等效项'runas'。 - Craig Ringer

2

这里的“NAME”指的是默认为“postgres”的用户名,而不是数据库名。请尝试一下,它可以正常工作。


1
你只需要在PostgreSQL中创建名称为django的数据库即可。默认情况下,用户postgres将拥有对数据库django的特权,并且密码将是用户postgres的密码。

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