Я использую Django 1.9.2 и psyopg2 2.6.1 с Python 3.5.0 в проекте, который я создал с помощью http://cookiecutter-django.readthedocs.org/en/latest/. У меня есть конфигурация базы данных, которая выглядит следующим образом:URL quote PostgreSQL пароль базы данных в Django
import environ
from django.utils.http import urlquote
env = environ.Env()
DATABASES = {
# 1) This does not work.
# 'default': env.db("DATABASE_URL",
# default="postgres://myuser:%[email protected]:5432/mydb" % "1234#abc")
# 2) This does not work.
# 'default': env.db("DATABASE_URL",
# default="postgres://myuser:%[email protected]:5432/mydb" % urlquote("1234#abc"))
# 3) This works
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': '1234#abc',
'PORT': 5432,
'HOST': '127.0.0.1'
}
}
Моего пароль база данных имеет в нем #
. Я могу успешно соединиться с опцией вариант # 3, но с двумя другими я получаю эти ошибки:
1) ValueError: invalid literal for int() with base 10: '1234'
2) django.db.utils.OperationalError: FATAL: password authentication failed for user "myuser"
.
Как правильно отправить этот пароль с помощью #
в PostgreSQL?
'urlquote ('1234 # abc')' будет возвращать '1234% 23abc', что явно не соответствует паролю вашей базы данных. – xyres
@xyres Я обновил вопрос, чтобы сделать мою проблему более ясной. – duffn
[Это ошибка] (http://github.com/joke2k/django-environ/issues/55). Автор библиотеки django-environ сделал запрос [pull request] (https://github.com/joke2k/django-environ/pull/69), чтобы исправить эту ошибку, но до сих пор не объединил ее. – xyres