복붙노트

[PYTHON] 암호에 특수 문자가 포함되어있을 때 연결 문자열 작성

PYTHON

암호에 특수 문자가 포함되어있을 때 연결 문자열 작성

저는 Python 프로젝트에 SQLalchemy를 사용하고 있습니다. 데이터베이스에 액세스하기 위해 깔끔한 연결 문자열을 갖고 싶습니다. 그래서 예를 들면 :

engine = create_engine('postgres://user:pass@host/database')

문제는 암호가 연결하려고 할 때 구분 기호로 해석되는 일련의 특수 문자를 포함하고 있기 때문입니다.

나는 단지 객체를 생성하고 다음과 같이 내 자격 증명을 전달할 수 있다는 것을 알았습니다.

drivername  = 'postgres',
username    = 'user', 
password    = 'pass', 
host        = 'host',
database    = 'database'

하지만 가능한 경우 연결 문자열을 사용하는 편이 낫습니다.

확실하게하려면 연결 문자열 또는 연결 문자열의 암호 부분을 인코딩 할 수 있습니까? 그러면 올바르게 구문 분석 할 수 있습니까?

해결법

  1. ==============================

    1.백 슬래시는 URL 구성 요소 문자열에 유효한 이스케이프 문자가 아닙니다. 연결 문자열의 암호 부분을 URL 인코딩해야합니다.

    백 슬래시는 URL 구성 요소 문자열에 유효한 이스케이프 문자가 아닙니다. 연결 문자열의 암호 부분을 URL 인코딩해야합니다.

    from urllib import quote_plus as urlquote
    from sqlalchemy.engine import create_engine
    engine = create_engine('postgres://user:%s@host/database' % urlquote('badpass'))
    

    SQLAlchemy에서 사용 된 클래스의 구현을 보면 (sqlalchemy / engine / url.py에서) 데이터베이스 연결 URL을 나타내면 URL 인스턴스를 문자열로 변환 할 때 같은 방법을 사용하여 암호를 이스케이프합니다. 구문 분석 코드는 보완 urllib.unquote_plus 함수를 사용하여 연결 문자열에서 암호를 추출합니다.

  2. from https://stackoverflow.com/questions/1423804/writing-a-connection-string-when-password-contains-special-characters by cc-by-sa and MIT license