비밀번호에 특수 문자가 포함 된 경우 연결 문자열 작성
-
07-07-2019 - |
문제
Python 프로젝트에 SQLALCHEMY를 사용하고 있으며 데이터베이스에 액세스하기 위해 깔끔한 연결 문자열을 갖고 싶습니다. 예를 들어 :
engine = create_engine('postgres://user:pass@host/database')
문제는 내 암호에 연결하려고 할 때 구분자로 해석되는 일련의 특수 문자가 포함되어 있다는 것입니다.
나는 단지 객체를 만들고 다음과 같은 자격 증명을 전달할 수 있다는 것을 알고 있습니다.
drivername = 'postgres',
username = 'user',
password = 'pass',
host = 'host',
database = 'database'
그러나 이것이 가능하다면 연결 문자열을 많이 사용하고 싶습니다.
명확하게 말하면, 연결 문자열 또는 연결 문자열의 비밀번호 부분을 인코딩하여 올바르게 구문 분석 할 수 있습니까?
해결책
Backslashes는 URL 구성 요소 문자열의 유효한 탈출 문자가 아닙니다. Connect String의 비밀번호 부분을 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에서 사용 된 클래스의 구현을 보면 데이터베이스 연결 URL을 나타냅니다 ( sqlalchemy/engine/url.py
), URL 인스턴스를 문자열로 변환 할 때 동일한 방법을 사용하여 암호를 피하고 구문 분석 코드가 보완을 사용한다는 것을 알 수 있습니다. urllib.unquote_plus
함수 연결 문자열에서 암호를 추출합니다.
제휴하지 않습니다 StackOverflow