DJANGO POSTGRESQL致命错误:数据库不存在(但实际上确实存在)[如何解决]

时间:2018-11-08 13:24:35

标签: python django postgresql

所有人。

我正在尝试在Django项目上配置postgresql,我遵循了this website上的教程,但是在尝试进行迁移时遇到了错误。

FATAL:如下所示,数据库“ laudosOnline”不存在:

    (venv) saudebelem@saudebelem-development:~/projeto/laudosOnline$ python3 manage.py makemigrations
/home/saudebelem/projeto/venv/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
  """)
Traceback (most recent call last):
  File "/home/saudebelem/projeto/venv/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
    self.connect()
  File "/home/saudebelem/projeto/venv/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/home/saudebelem/projeto/venv/lib/python3.6/site-packages/django/db/backends/postgresql/base.py", line 178, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/home/saudebelem/projeto/venv/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL:  database "laudosOnline" does not exist

这是我在settings.py上的数据库配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ.get('DB_NAME', 'laudosOnline'),
    'USER': os.environ.get('DB_USER', 'edson'),
    'PASSWORD': os.environ.get('DB_PASS', 'mypassword'),
    'HOST': 'localhost',
    'PORT': '5432',
    }
}

现在,尴尬的部分:

我确定我已经创建了laudosOnline数据库,所以我去了psql并尝试再次创建该数据库,令我惊讶的是,我得到了一条消息:错误:数据库“ laudosonline”已经存在,如下所示:

postgres=# CREATE DATABASE laudosOnline WITH OWNER edson;
ERROR:  database "laudosonline" already exists

这是当意识到一件事情时:postgres不区分大小写,而当我尝试使用大写字母创建数据库时,例如我的“ laudosOnline”,它创建了一个名为“ laudosonline”的数据库,而没有大写字母。

在订单方面,python本身是区分大小写的,所以我要做的就是返回我的settings.py并将我的数据库名称重命名为其无大写字母的版本:

DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': os.environ.get('DB_NAME', 'laudosonline'),
        'USER': os.environ.get('DB_USER', 'edson'),
        'PASSWORD': os.environ.get('DB_PASS', 'mypassword'),
        'HOST': 'localhost',
        'PORT': '5432',
        }
    }

瞧,它解决了!

我知道这是一个愚蠢的错误,但是我花了大约1个小时来尝试解决这个问题,但我在互联网上找不到解决方案。因此,我希望它对将来可能会遇到此问题的其他人有所帮助。

谢谢。

0 个答案:

没有答案