Запись строки подключения, когда пароль содержит специальные символы - PullRequest
25 голосов
/ 15 сентября 2009

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

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

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

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

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

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

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

1 Ответ

48 голосов
/ 15 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...