FAQ: Базы данных и модели ¶
Как я могу увидеть необработанные SQL-запросы, которые выполняет Django? ¶
Убедитесь, что ваш DEBUG
параметр Django установлен на 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 - INSERT, UPDATES, SELECT и т. д. Каждый раз, когда ваше приложение попадает в базу данных, запрос будет записываться.
Если вы используете несколько баз данных , вы можете использовать один и тот же интерфейс для каждого члена connections
словаря:
>>> from django.db import connections
>>> connections['my_db_alias'].queries
Если вам нужно очистить список запросов вручную в любой момент в ваших функциях, вызовите reset_queries()
, например:
from django.db import reset_queries
reset_queries()
Могу ли я использовать Django с уже существующей базой данных? ¶
Да. См. Интеграция с устаревшей базой данных .
Если я внесу изменения в модель, как мне обновить базу данных? ¶
Взгляните на поддержку Django для .schema migrations
Если вы не против очистки данных, manage.py
утилита вашего проекта имеет
flush
возможность сбросить базу данных до состояния, в котором она находилась сразу после migrate
выполнения.
Поддерживают ли модели Django первичные ключи с несколькими столбцами? ¶
Нет. Поддерживаются только первичные ключи с одним столбцом.
Но на практике это не проблема, потому что ничто не мешает вам добавить другие ограничения (используя параметр unique_together
модели или создать ограничение непосредственно в вашей базе данных) и обеспечить уникальность на этом уровне. Первичные ключи с одним столбцом необходимы для работы таких вещей, как интерфейс администратора; например, вам нужно одно значение, чтобы указать объект для редактирования или удаления.
Поддерживает ли Django базы данных NoSQL? ¶
Базы данных NoSQL официально не поддерживаются самим Django. Однако есть ряд сторонних проектов и форков, которые позволяют использовать NoSQL в Django.
Вы можете заглянуть на вики-страницу, где обсуждаются некоторые проекты.
Как мне добавить параметры, относящиеся к базе данных, в мои операторы CREATE TABLE, например указать MyISAM в качестве типа таблицы? ¶
Мы стараемся избегать добавления особых случаев в код Django, чтобы учесть все параметры, специфичные для базы данных, такие как тип таблицы и т. Д. Если вы хотите использовать любой из этих параметров, создайте миграцию с
RunSQL
операцией, которая содержит
инструкции, которые делают то, что ты хочешь сделать.ALTER TABLE
Например, если вы используете MySQL и хотите, чтобы ваши таблицы использовали тип таблицы MyISAM, используйте следующий SQL:
ALTER TABLE myapp_mytable ENGINE=MyISAM;