Запись строки подключения, когда пароль содержит специальные символы
-
07-07-2019 - |
Вопрос
Я использую 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
для извлечения пароля из строки подключения.