문제

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 함수 연결 문자열에서 암호를 추출합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top