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

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

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

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

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

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

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

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

  • Как создать флеш-приложение вокруг уже существующей базы данных?
  • MemoryError с помощью json.dumps ()
  • Преобразование ORM SQLAlchemy в pandas DataFrame
  • Обратное определение декларативного класса SQLAlchemy из существующей базы данных MySQL?
  • Как удалить таблицу в SQLAlchemy?
  • Flask SQLAlchemy db.create_all () не создает базу данных
  • Могут ли события SQLAlchemy использоваться для обновления денормализованного кэша данных?
  • Flask: Как управлять различными базами данных среды?
  • 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 для извлечения пароля из строки подключения.

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