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

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

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

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

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

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

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

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

One Solution collect form web for “Написание строки подключения, когда пароль содержит специальные символы”

Обратные слэши не являются допустимыми 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 для извлечения пароля из строки подключения.

Interesting Posts

Выберите имена файлов автоматически на основе расчета, а затем импортируйте их в python

Django: редактирование поля в зависимости от значения другого поля

Как объединить два кадра данных панды (или значения переноса) путем сравнения диапазонов значений

TypeError: аргумент 1 должен быть ImagingCore, а не ImagingCore

startswith TypeError в функции

Pandas: Как удалить строки из фреймворка на основе списка?

Не удалось прочитать файл csv, загруженный в ведро Google Cloud Storage

Базовая карта Python «Утверждение не выполнено»

Надежное обнаружение загрузки страницы или тайм-аута, Selenium 2

Возможно ли наложение 3-х гистограмм в matplotlib?

Экземпляр GAE работает на другом URL-адресе

Алгоритмы семантической привязки – python

Сброс времени истечения срока действия файла cookie в колбе

Инициализировать список для переменной в словаре внутри цикла

python удаляет повторяющиеся словари из списка

Python - лучший язык программирования в мире.