Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются OPTIONS параметры словаря в конфигурации Django DATABASES . Эти параметры управляют mssql-django подключением к SQL Server через драйвер ODBC.
Выбор драйвера ODBC
mssql-django По состоянию на 1.7 серверная часть по умолчанию использует драйвер ODBC 18 для SQL Server. Если драйвер ODBC 18 не установлен, серверная часть автоматически возвращается к ODBC Driver 17.
Note
Драйвер ODBC 18 включает Encrypt=yes по умолчанию и проверяет сертификат сервера. Подключения, которые работали с драйвером 17, могут завершиться ошибкой доверия SSL/TLS. Чтобы устранить сбой, выполните следующие действия.
- Для локального SQL Server установите сертификат сервера из центра сертификации, которому клиенты уже доверяют, или импортируйте существующий сертификат сервера в каждое хранилище доверия клиента. Инструкции см. в разделе "Настройка SQL Server Database Engine для шифрования подключений".
- Если вы подключаетесь по IP-адресу или по псевдониму, который не соответствует полю Subject сертификата или полю Subject Alternative Name (SAN), добавьте
HostNameInCertificate=<name-from-certificate>кextra_params.
Сведения о локальной разработке для самозаверяющего сертификата см. в разделе TrustServerCertificate"Дополнительные параметры ODBC".
Драйвер можно указать явным образом:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 17 for SQL Server",
},
},
}
В Linux можно также указать полный путь к библиотеке драйверов:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.0.so.1.1",
},
},
}
DSN и HOST
Можно подключиться с помощью HOST имени или именованного имени DSN (имя источника данных).
Подключиться к HOST
Большинство конфигураций используют параметр HOST напрямую:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
}
Подключение с помощью DSN
Используйте именованный DSN, настроенный в источниках данных ODBC:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"OPTIONS": {
"dsn": "MyDataSourceName",
},
},
}
Поддержка FreeTDS
Чтобы использовать FreeTDS в качестве драйвера ODBC, установите значение host_is_serverTrue. Это указывает серверной части использовать HOST и PORT напрямую вместо поиска имени сервера данных в freetds.conf:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "FreeTDS",
"host_is_server": True,
},
},
}
Дополнительные сведения о подключениях без dsN с помощью FreeTDS см. в руководстве пользователя FreeTDS.
Дополнительные параметры ODBC
Используйте extra_params для передачи дополнительных параметров ODBC строка подключения. Это значение представляет собой строку с запятой, добавленную к строка подключения:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>.database.windows.net",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "TrustServerCertificate=yes;ApplicationIntent=ReadOnly",
},
},
}
Этот параметр также используется для ключевых слов проверки подлинности Microsoft Entra.
Caution
Используйте TrustServerCertificate=yes только для локальной разработки с самоподписанными сертификатами. Не используйте его в рабочей среде. Это отключает проверку цепочки сертификатов и повышает риск атаки «злоумышленник посередине». Установите доверенный сертификат на сервер и подключитесь с помощью TrustServerCertificate=no.
Время ожидания подключения и повторные попытки
Настройте устойчивость подключения с параметрами времени ожидания и повторных попыток:
| Опция | По умолчанию | Description |
|---|---|---|
connection_timeout |
0 (отключено) |
Максимальное количество секунд для ожидания подключения. |
connection_retries |
5 |
Количество повторных попыток при сбое подключения. |
connection_retry_backoff_time |
5 |
Секунды ожидания между повторными попытками. |
query_timeout |
0 (отключено) |
Максимальное количество секунд ожидания завершения запроса. |
Пример:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"connection_timeout": 30,
"connection_retries": 3,
"connection_retry_backoff_time": 10,
"query_timeout": 120,
},
},
}
Collation
Настройте пользовательские правила сортировки для поиска в текстовом поле:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"collation": "Chinese_PRC_CI_AS",
},
},
}
Несколько подключений к базе данных
Django поддерживает подключение к нескольким базам данных одновременно. Это полезно для реплик чтения, запросов между базами данных или разделения рабочих нагрузок по уровню изоляции.
Настройка нескольких баз данных
Определите каждое соединение в параметре DATABASES :
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "app_db",
"HOST": "<your-primary-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
},
"readonly": {
"ENGINE": "mssql",
"NAME": "app_db",
"HOST": "<your-readonly-replica>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "Encrypt=yes;ApplicationIntent=ReadOnly",
},
},
"analytics": {
"ENGINE": "mssql",
"NAME": "analytics_db",
"HOST": "<your-analytics-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"isolation_level": "READ UNCOMMITTED",
},
},
}
Caution
READ UNCOMMITTED допускает грязное чтение. Используйте этот уровень изоляции только для запросов отчетов или аналитики, где абсолютная точность не требуется. Дополнительные сведения см. в разделе "Управление транзакциями".
Маршрутизация запросов с помощью маршрутизатора базы данных
Создайте маршрутизатор базы данных для направления операций чтения и записи к соответствующему подключению:
class ReadReplicaRouter:
"""Route read queries to the readonly replica, writes to the primary."""
def db_for_read(self, model, **hints):
return "readonly"
def db_for_write(self, model, **hints):
return "default"
def allow_relation(self, obj1, obj2, **hints):
return True
def allow_migrate(self, db, app_label, model_name=None, **hints):
return db == "default"
Регистрация маршрутизатора в settings.py:
DATABASE_ROUTERS = ["myproject.routers.ReadReplicaRouter"]
Сохраните класс маршрутизатора в файле, myproject/routers.pyнапример.
Запрос конкретной базы данных напрямую
using() Используйте метод для запроса определенного псевдонима базы данных:
# Explicit read from analytics database
reports = AnalyticsReport.objects.using("analytics").filter(date__gte="2025-01-01")
# Write to default
Product.objects.create(name="Widget", price=9.99)
Дополнительные сведения об уровнях изоляции для баз данных для каждого подключения см. в разделе "Чтение данных без блокировки".