パスワードに特殊文字が含まれる場合の接続文字列の作成
-
07-07-2019 - |
質問
PythonプロジェクトにSQLalchemyを使用していますが、データベースにアクセスするための整然とした接続文字列が必要です。例えば:
engine = create_engine('postgres://user:pass@host/database')
問題は、接続しようとするとパスワードに区切り文字として解釈される一連の特殊文字がパスワードに含まれていることです。
オブジェクトを作成して、次のように資格情報を渡すことができることに気付きました:
drivername = 'postgres',
username = 'user',
password = 'pass',
host = 'host',
database = 'database'
しかし、可能であれば接続文字列を使用したいです。
明確にするために、接続文字列または接続文字列のパスワード部分をエンコードして、適切に解析できるようにしますか?
解決
バックスラッシュは、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 / engine / url.py
で)データベース接続URLを表すためにSQLAlchemyで使用されるクラスの実装を見ると、同じメソッドを使用してパスワードをエスケープしていることがわかります。 URLインスタンスを文字列に変換し、解析コードが補完的な urllib.unquote_plus
関数を使用して接続文字列からパスワードを抽出する場合。
所属していません StackOverflow