Запись строки подключения, когда пароль содержит специальные символы

StackOverflow https://stackoverflow.com/questions/1423804

Вопрос

Я использую SQLalchemy для проекта Python и хочу иметь аккуратную строку подключения для доступа к моей базе данных. Так, например:

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

Проблема в том, что мой пароль содержит последовательность специальных символов, которые интерпретируются как разделители при попытке подключения.

Я понимаю, что могу просто создать объект, а затем передать свои учетные данные следующим образом:

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

Но я бы предпочел использовать строку подключения, если это возможно.

Итак, чтобы быть ясным, возможно ли закодировать мою строку подключения или часть пароля строки подключения - чтобы ее можно было правильно проанализировать?

Это было полезно?

Решение

Обратная косая черта не является допустимым escape-символом для строк компонента 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 для представления URL-адресов подключения к базе данных (в sqlalchemy / engine / url.py ), вы увидите, что они используют один и тот же метод для экранирования паролей. при преобразовании экземпляров URL-адресов в строки и в том, что код синтаксического анализа использует дополнительную функцию urllib.unquote_plus для извлечения пароля из строки подключения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top