Короткий ответ
DSN (connection string) — это строка, описывающая все параметры подключения к БД: драйвер, пользователя, пароль, хост, порт, имя базы и дополнительные опции (например, SSL-режим), которую используют драйверы и ORM для установления соединения.
Как это работает подробнее
Формат URL обычно выглядит как postgresql://user:password@host:port/dbname?param=value; ORM и драйверы парсят эту строку, чтобы получить все данные для TCP-соединения и аутентификации.
Пример кода
example.py
import os
DATABASE_URL = (
f"postgresql://{os.environ['DB_USER']}:{os.environ['DB_PASSWORD']}"
f"@{os.environ['DB_HOST']}:{os.environ.get('DB_PORT', '5432')}"
f"/{os.environ['DB_NAME']}?sslmode=require"
)
# Пример (учебный, без реальных секретов): postgresql://app_user:***@db.internal:5432/app_db?sslmode=requireЧто использовать на практике
- Практика. Секреты (пароль) нельзя хранить в коде или в системе контроля версий — их передают через переменные окружения или секрет-хранилище (Vault, AWS Secrets Manager), а в коде собирают DSN динамически.
Подводные камни
- Ошибка. Хардкодят пароль прямо в строке подключения в репозитории; не указывают sslmode=require в production, что может оставить трафик к БД незашифрованным при подключении через внешнюю сеть.