• 3.1
  • 5.0
  • 6.1
  • Версия документации: 3.2

FAQ: Базы данных и модели

Как посмотреть SQL, который генерирует Django?

Make sure your Django DEBUG setting is set to True. Then do this:

>>> 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 is only available if DEBUG is True. It’s a list of dictionaries in order of query execution. Each dictionary has the following:

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

connection.queries включает в себя все SQL запросы: INSERT, UPDATE, SELECT и тд. Каждый раз, когда приложение обращается к БД, запросы протоколируются.

If you are using multiple databases, you can use the same interface on each member of the connections dictionary:

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

Для очистки списка запросов вручную вызовите reset_queries(), например:

from django.db import reset_queries
reset_queries()

Can I use Django with a pre-existing database?

Да, подробнее здесь - Integrating with a legacy database

После изменений в модели как обновить базу данных?

Посмотрите на поддержку миграций структуры данных в Django.

Если вам не обязательно сохранять все данные, то для manage.py есть команда flush, которая сбрасывает состояние БД на момент непосредственно после выполнения migrate.

Поддерживает ли Django составные главные ключи?

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

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

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

NoSQL базы данных официально не поддерживаются Django. Однако, есть сторонние проекты и форки, которые позволяют использовать NoSQL, например, `Django non-rel`_.

На вики можно найти информацию по использованию различных библиотек.

Как добавить СУБД-специфичные опции (например, тип таблицы MyISAM) в выражение CREATE TABLE?

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

For example, if you’re using MySQL and want your tables to use the MyISAM table type, use the following SQL:

ALTER TABLE myapp_mytable ENGINE=MyISAM;
Back to Top