Spec-Zone.ru › Django 4.1

Инструментарий базы данных

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

Обертки моделируют средства – это вызываемые объекты, которые принимают другой вызываемый объект в качестве одного из своих аргументов. Они вызывают этот вызываемый объект для вызова (возможно, обернутого) запроса к базе данных, и они могут делать все, что захотят, вокруг этого вызова. Тем не менее, они создаются и устанавливаются кодом пользователя, и поэтому не требуют отдельной фабрики, как средства.

Установка обертки выполняется в контекстном менеджере – поэтому обертки временные и специфичны для какого-либо потока в вашем коде.

Как упоминалось выше, примером обертки является блокиратор выполнения запроса. Он может выглядеть так:

И он будет использоваться в представлении для блокировки запросов из шаблона следующим образом:

Параметры, отправленные оберткам, следующие:

  • execute – вызываемый объект, который должен быть вызван со всеми остальными параметрами для выполнения запроса.
  • sql – str, SQL-запрос, который должен быть отправлен в базу данных.
  • params – список/кортеж значений параметров для SQL-команды или список/кортеж списков/кортежей, если обернутый вызов executemany().
  • many – bool, указывающий, является ли окончательно вызванный вызов execute() или executemany() (и ожидается ли params быть последовательностью значений или последовательностью последовательностей значений).
  • context – словарь с дополнительными данными о контексте вызова. Это включает соединение и курсор.

Используя параметры, несколько более сложная версия блокиратора может включать имя соединения в сообщение об ошибке:

Для более полного примера, регистратор запросов может выглядеть следующим образом:

Чтобы использовать это, вы создадите объект регистратора и установите его как обертку:

connection.execute_wrapper()

execute_wrapper(wrapper)

Возвращает контекстный менеджер, который при входе устанавливает обертку вокруг выполнения запросов к базе данных, а при выходе удаляет обертку. Обёртка устанавливается на объекте соединения в потоке.

wrapper – это вызываемый объект, принимающий пять аргументов. Он вызывается при каждом выполнении запроса в области контекстного менеджера с аргументами execute, sql, params, many, и context, как описано выше. Ожидается, что он вызовет execute(sql, params, many, context) и вернёт значение результата этого вызова.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.1/topics/db/instrumentation/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API