Установите 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... Каждый раз, когда приложение обращается к БД, запросы протоколируются. Внимание, могут быть проблемы с incorrectly quoted under SQLite
Если вы используете multiple databases, то для каждого словаря connections есть свои интерфейсы.
>>> from django.db import connections
>>> connections['my_db_alias'].queries
Да, подробнее здесь - Integrating with a legacy database
Если это не удаление данных, то для manage.py есть команда flush, которая сбрасывает состояние БД на момент непосредственно после выполнения syncdb.
Если же вы удаляли данные, то извините - только вручную через ALTER TABLE.
Это external projects which handle schema updates, которое де-факто стандарт для миграций - south.
Нет, поддерживаются только главные ключи, состоящие из одного столбца.
На практике это не является проблемой, так как не мешает добавлению других ограничений (с использованием ключа unique_together в модели или условий в БД), обеспечив уникальность на этом уровне. Главный ключ из одного столбца нужен, например, для работы интерфейса администратора - должен быть простой способ определить объект для изменения или удаления.
Мы стараемся избегать добавления таких специфичных настроек в код Django. Если же это действительно нужно, то создайте SQL initial data file, который будет содержать выражение ALTER TABLE для тонкой настройки. Оно будет выполнено непосредственно после CREATE TABLE.
Например, при использовании MySQL для указания типа таблицы MyISAM создайте такой файл со следующим содержимым:
ALTER TABLE myapp_mytable ENGINE=MyISAM;
Согласно документации SQL initial data file, этот файл может содержать любые SQL выражения, так что вы можете производить любые изменения.
Известных утечек памяти у Django нет. Если вы заметили, что Django кушает всё больше и больше памяти, не освобождая её, то установите DEBUG в False. В противном случае Django хранит все копии запросов, которые были выполнены.
(Запросы сохраняются в django.db.connection.queries, подробнее в `How can I see the raw SQL queries Django is running?`_.)
Для решения проблемы установите DEBUG в False.
Для очистки списка запросов вручную вызовите reset_queries(), например:
from django import db
db.reset_queries()
Mar 30, 2016