Установите 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 доступны только при включённой отладке. Это обычный словарь выполняемых запросов, каждый из которых содержит следующее:
``sql`` -- The raw SQL statement
``time`` -- How long the statement took to execute, in seconds.
connection.queries включает в себя все SQL запросы: INSERT, UPDATE, SELECT и тд. Каждый раз, когда приложение обращается к БД, запросы протоколируются.
Если вы используете multiple databases, то для каждого словаря connections есть свои интерфейсы.
>>> from django.db import connections
>>> connections['my_db_alias'].queries
Для очистки списка запросов вручную вызовите reset_queries(), например:
from django.db import reset_queries
reset_queries()
Да, подробнее здесь - Integrating with a legacy database
Посмотрите на поддержку миграций структуры данных в Django.
Если вам не обязательно сохранять все данные, то для manage.py есть команда flush, которая сбрасывает состояние БД на момент непосредственно после выполнения migrate.
Нет, поддерживаются только главные ключи, состоящие из одного столбца.
На практике это не является проблемой, так как не мешает добавлению других ограничений (с использованием ключа unique_together в модели или условий в БД), обеспечив уникальность на этом уровне. Главный ключ из одного столбца нужен, например, для работы интерфейса администратора - должен быть простой способ определить объект для изменения или удаления.
NoSQL базы данных официально не поддерживаются Django. Однако, есть сторонние проекты и форки, которые позволяют использовать NoSQL, например, Django non-rel.
В вики можно найти обсуждение различных библиотек.
Мы стараемся избегать добавления таких специфичных настроек в код Django. Если же это действительно нужно, создайте миграцию с RunSQL, который будет содержать выражение ALTER TABLE для тонкой настройки.
Например, при использовании MySQL для указания типа таблицы MyISAM используйте следующий SQL:
ALTER TABLE myapp_mytable ENGINE=MyISAM;
Mar 31, 2016