ВОПРОСЫ И ОТВЕТЫ: Базы данных и модели¶
Как я могу увидеть необработанные 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;