2016-02-17 26 views
5

http://cookiecutter-django.readthedocs.org/en/latest/で作成したプロジェクトで、Django 1.9.2とpsyopg2 2.6.1をPython 3.5.0で使用しています。URL quote DjangoのPostgreSQLデータベースのパスワード

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' 
    } 
} 

私のデータベースのパスワードはそれで#を持っている:私はこのようになり、データベースの構成を有しています。 django.db.utils.OperationalError: FATAL: password authentication failed for user "myuser"

1)ValueError: invalid literal for int() with base 10: '1234'

2:私は正常にオプション#3オプションを使用して接続することができますが、他の二つと私はこれらのエラーを受け取ります。

#のパスワードをPostgreSQLに正しく送信するにはどうすればよいですか?

+0

'urlquote( '1234#abc')'はデータベースのパスワードとは明らかに異なる '1234%23abc'を返します。 – xyres

+0

@xyres問題をより明確にするために質問を更新しました。 – duffn

+3

[これはバグです](http://github.com/joke2k/django-environ/issues/55)。 django-environライブラリの作者は、このバグを修正するために[プルリクエスト](https://github.com/joke2k/django-environ/pull/69)を作成しましたが、それをまだマージしていません。 – xyres

答えて

0

はあなたのケースでは、すなわち、生の文字列としてそれをコードしてみてください。

'default': env.db("DATABASE_URL", 
    default="postgres://myuser:%[email protected]:5432/mydb" % r"1234#abc") 

ポストバック検索結果に。

関連する問題