2016-02-17 17 views
5

Tôi đang sử dụng Django 1.9.2 và psyopg2 2.6.1 với Python 3.5.0 trong một dự án mà tôi đã tạo với http://cookiecutter-django.readthedocs.org/en/latest/. Tôi có một cấu hình cơ sở dữ liệu mà trông như thế này:URL trích dẫn mật khẩu cơ sở dữ liệu PostgreSQL tại 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' 
    } 
} 

mật khẩu cơ sở dữ liệu của tôi có một # trong đó. Tôi thành công có thể kết nối với tùy chọn # 3 tùy chọn, nhưng với hai người kia tôi nhận được các lỗi này:

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

2) django.db.utils.OperationalError: FATAL: password authentication failed for user "myuser".

Làm cách nào để gửi mật khẩu này đúng cách bằng # tới PostgreSQL?

+0

'urlquote ('1234 # abc')' sẽ trả về '1234% 23abc' rõ ràng không khớp với mật khẩu của cơ sở dữ liệu của bạn. – xyres

+0

@xyres Tôi đã cập nhật câu hỏi để làm cho vấn đề của tôi rõ ràng hơn. – duffn

+3

[Đó là lỗi] (http://github.com/joke2k/django-environ/issues/55). Tác giả của thư viện django-environ đã thực hiện [pull request] (https://github.com/joke2k/django-environ/pull/69) để sửa lỗi này nhưng vẫn chưa hợp nhất nó. – xyres

Trả lời

0

Hãy thử mã hóa nó như là một chuỗi nguyên, tức là, trong trường hợp của bạn:

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

bài viết trở lại với kết quả của bạn.

Các vấn đề liên quan