• en
  • Язык: ru

ВОПРОСЫ И ОТВЕТЫ: Базы данных и модели

Как я могу увидеть необработанные SQL-запросы, которые выполняет Django?

Убедитесь, что в настройках Django DEBUG установлено значение True. Затем сделайте следующее:

>>> from django.db import connection
>>> connection.queries
[{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls',
'time': '0.002'}]

connection.queries доступен, только если DEBUG - True. Это список словарей в порядке выполнения запроса. Каждый словарь имеет следующее:

``sql`` -- The raw SQL statement
``time`` -- How long the statement took to execute, in seconds.

connection.queries включает все SQL-запросы - INSERTs, UPDATES, SELECTs и т.д. Каждый раз, когда ваше приложение обращается к базе данных, запрос будет записываться.

Если вы используете multiple databases, вы можете использовать один и тот же интерфейс для каждого члена словаря connections:

>>> from django.db import connections
>>> connections['my_db_alias'].queries

Если вам нужно очистить список запросов вручную в любой точке вашей функции, вызовите reset_queries(), например, так:

from django.db import reset_queries
reset_queries()

Могу ли я использовать Django с уже существующей базой данных?

Да. См. Integrating with a legacy database.

Если я вношу изменения в модель, как мне обновить базу данных?

Посмотрите на поддержку schema migrations в Django.

Если вы не против очистки данных, утилита manage.py вашего проекта имеет опцию flush для сброса базы данных в состояние, в котором она находилась сразу после выполнения migrate.

Поддерживают ли модели Django первичные ключи с несколькими столбцами?

Нет. Поддерживаются только одностолбцовые первичные ключи.

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

Поддерживает ли Django базы данных NoSQL?

Базы данных NoSQL официально не поддерживаются самим Django. Однако существует ряд побочных проектов и форков, которые позволяют реализовать функциональность NoSQL в Django.

Вы можете заглянуть на сайт the wiki page, где обсуждаются некоторые проекты.

Как добавить в утверждения CREATE TABLE параметры, специфичные для базы данных, например, указать MyISAM в качестве типа таблицы?

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

Например, если вы используете MySQL и хотите, чтобы ваши таблицы использовали тип таблиц MyISAM, используйте следующий SQL:

ALTER TABLE myapp_mytable ENGINE=MyISAM;
Вернуться на верх