Python Django中的URL quote PostgreSQL数据库密码
我在用Python 3.5.0创建的项目中使用Django 1.9.2和psyopg2.6.1。我的数据库配置如下所示:Python Django中的URL quote PostgreSQL数据库密码,python,django,postgresql,Python,Django,Postgresql,我在用Python 3.5.0创建的项目中使用Django 1.9.2和psyopg2.6.1。我的数据库配置如下所示: import environ from django.utils.http import urlquote env = environ.Env() DATABASES = { # 1) This does not work. # 'default': env.db("DATABASE_URL", # default
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:%s@127.0.0.1:5432/mydb" % "1234#abc")
# 2) This does not work.
# 'default': env.db("DATABASE_URL",
# default="postgres://myuser:%s@127.0.0.1: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:以10为基数的int()的文本无效:“1234”
2) django.db.utils.OperationalError:致命:用户“myuser”的密码身份验证失败
如何使用
#
将此密码正确发送到PostgreSQL?尝试将其编码为原始字符串,即在您的情况下:
'default': env.db("DATABASE_URL",
default="postgres://myuser:%s@127.0.0.1:5432/mydb" % r"1234#abc")
返回您的结果。
urlquote('1234#abc')
将返回1234%23abc
,它显然与您的数据库密码不匹配。@xyres我已更新了问题以使我的问题更清楚。。django Enviro库的作者已经做了一个修改来修复这个bug,但仍然没有合并它。