Python django базы данных

Модели

Для хранения данных в веб-приложении, как правило, применются базы данных. И фреймворк Django уже по умолчанию предоставляет удобный функционал для работы с различными системами баз данных.

Настройки подключения к базе данных

По умолчанию Django в качестве базы данных использует SQLite. Она очень проста в использовании и не требует запущенного сервера. Все файлы базы данных могут легко переноситься с одного компьютера на другой. Однако при необходимости мы можем использовать в Django большинство распространенных СУБД.

Для работы с базами данных в проекте Django в файле settings.py определен параметр DATABASES , который по умолчанию выглядит следующим образом:

Переменная DATABASES содержит набор конфигураций подключений к базам данных в виде словаря. Ключи в этом словаре — названия подключений. То есть мы можем определить кучу подключений. Но как минимум одно подключение должно быть определено в переменной DATABASES — подключение с именем default , которое представляет подключение по умолчанию.

Конфигурация каждого подключения может состоять из ряда параметров. По умолчанию указываются только два параметра. Параметр ENGINE указывает на используемый движок для доступа к БД. В данном случае это встроенный пакет django.db.backends.sqlite3 .

Второй параметр — NAME указывает на путь к базе данных. По умолчанию база данных называется db.sqlite3 . Для установки пути используется каталог из переменной BASE_DIR, которая задана в начале файла:

BASE_DIR = Path(__file__).resolve().parent.parent

По умолчанию BASE_DIR указывает на каталог, в котором находится папка проекта. И после первого запуска проекта в указанном каталоге по умолчанию будет создан файл db.sqlite3 , который собственно и будет использоваться в качестве базы данных.

Читайте также:  Php new namespace class

Установка пути к базе данных в проекте Django

Поддерживаемые субд

Чтобы использовать другие системы управления базами данных, необходимо будет установить соответствующий пакет.

Источник

Базы данных¶

Django официально поддерживает следующие базы данных:

Django пытается поддерживать как можно больше функций на всех бэкендах баз данных. Однако, не все базы данных одинаковы, и нам пришлось принимать проектные решения о том, какие функции поддерживать и какие предположения мы можем сделать безопасными.

Этот файл описывает некоторые возможности, которые могут иметь отношение к использованию Django. Он не предназначен для замены документации по конкретному серверу или справочных руководств.

Общие примечания¶

Постоянные соединения¶

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

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

Управление соединениями¶

Django открывает соединение с базой данных при первом запросе к базе данных. Он держит это соединение открытым и повторно использует его в последующих запросах. Django закрывает соединение, когда оно превышает максимальный возраст, определенный параметром CONN_MAX_AGE или когда оно больше не может использоваться.

В деталях, Django автоматически открывает соединение с базой данных всякий раз, когда ему требуется соединение, а его еще нет — либо потому, что это первое соединение, либо потому, что предыдущее соединение было закрыто.

В начале каждого запроса Django закрывает соединение, если оно достигло своего максимального возраста. Если ваша база данных завершает простаивающие соединения через некоторое время, вам следует установить CONN_MAX_AGE на меньшее значение, чтобы Django не пытался использовать соединение, которое было завершено сервером базы данных. (Эта проблема может затрагивать только сайты с очень низким трафиком).

Читайте также:  Array map trim php

В конце каждого запроса Django закрывает соединение, если оно достигло своего максимального возраста или находится в состоянии неустранимой ошибки. Если во время обработки запросов произошли ошибки базы данных, Django проверяет, работает ли еще соединение, и закрывает его, если нет. Таким образом, ошибки базы данных влияют максимум на один запрос в каждом рабочем потоке приложения; если соединение становится непригодным, следующий запрос получает свежее соединение.

Установка значения CONN_HEALTH_CHECKS в True может быть использована для повышения надежности повторного использования соединения и предотвращения ошибок, когда соединение было закрыто сервером базы данных, который теперь готов принимать и обслуживать новые соединения, например, после перезапуска сервера базы данных. Проверка работоспособности выполняется только один раз за запрос и только в том случае, если во время обработки запроса происходит обращение к базе данных.

Оговорки¶

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

Иногда к базе данных не будет обращаться большинство ваших представлений, например, потому что это база данных внешней системы или благодаря кэшированию. В таких случаях следует установить CONN_MAX_AGE на низкое значение или даже 0 , потому что нет смысла поддерживать соединение, которое вряд ли будет использоваться повторно. Это поможет сохранить небольшое количество одновременных соединений с этой базой данных.

Сервер разработки создает новый поток для каждого обрабатываемого запроса, сводя на нет эффект постоянных соединений. Не включайте их во время разработки.

Когда Django устанавливает соединение с базой данных, он настраивает соответствующие параметры, в зависимости от используемого бэкенда. Если вы включите постоянные соединения, эта настройка больше не будет повторяться при каждом запросе. Если вы изменяете такие параметры, как уровень изоляции соединения или часовой пояс, вам следует либо восстановить значения по умолчанию Django в конце каждого запроса, либо принудительно установить соответствующее значение в начале каждого запроса, либо отключить постоянные соединения.

Читайте также:  nth-child

Кодирование¶

Django предполагает, что все базы данных используют кодировку UTF-8. Использование других кодировок может привести к неожиданному поведению, например, к ошибкам «значение слишком длинное» от вашей базы данных для данных, которые действительны в Django. Информацию о том, как правильно настроить вашу базу данных, смотрите ниже в примечаниях к конкретным базам данных.

Источник

Оцените статью