質問

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 関数を使用して接続文字列からパスワードを抽出する場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top