Команды cli для django
py manage.py createapp [appname]
— создать новое приложение в текущем проектеpy manage.py makemigrations [--empty] [appname]
— генерация [шаблона] файла миграции [в приложении]py manage.py showmigrations [appname]
— показать состояние миграций [конкретного приложения]py manage.py migrate [appname] [migration_name]
— генерация схемы БД на основе [файлов миграций] моделей [либо откат миграции кmigration_name
, которая совпадает с именем файла миграции]py manage.py migrate [appname] --fake
— отметить миграции [для конкретного приложения] как выполненныеpython manage.py sqlmigrate <appname> <migration_name>
— показывает, какие sql-запросы генерируются конкретной миграциейpy manage.py createsuperuser
— создание супер администратораpy manage.py test [packname]
— запуск тестов [конкретного пакета/приложения] проектаpy manage.py collectstatic
— объединение всех статических файловpy manage.py dumpdata [appname[.model]] [--format xml] > dump.json
— сделать дамп базы данныхpy manage.py loaddata mydata.json
— загрузить данные из дампаpy manage.py flush
— удаляет все данные из базы данныхpy manage.py dbshell
— войти в командную оболочку используемой базы данныхpython manage.py check [appname]
— сделать проверку на распространенные ошибкиpython manage.py changepassword <user_name>
— сменить пароль пользователяpy manage.py help
— показать список всех доступных команд
Дополнительно:
cli для sqlite:
(sqlite3
)
sqlite [db_filename] .dump > dump.sql
— сохранить дамп базы данных в файл либо из shell:.output dump.sql .dump
sqlite3 [db_filename] < dump.sql
— загрузить из дампа в базу данных. Либо из shell.read dump.sql
cli для mysql:
(`mysql`)
Удалить все таблицы из базы данных, не удаляя саму БД:
DROP DATABASE coding_skills_new;
CREATE DATABASE coding_skills_new;
cli для pgsql:
(psql
)
Конверторы между базами данных
- mysqltosqlite конвертор — конвертирует дамп из mysql в sqlite-совместимый формат
- mysqltopgsql конвертор — конвертирует дамп из mysql в pgsql-совместимый формат
Удалить все таблицы в postgres, не удаляя саму базу данных (полезно при ремиграциях с нуля):
DROP SCHEMA public CASCADE; CREATE SCHEMA public;
PS:
Экспорт и импорт данных в джанго
При миграции джанго вы можете столкнуться с тем, что необходимо сделать неполный дамп и накатить его на пустую бд, например, так: `py manage.py dumpdata —exclude=relevance_tests —indent 4 > dump.json`. Однако, на практике это может оказаться не так просто и вас могут поджидать множество `UNIQUE` и FOREIGN
constraint failed: django_site.domain
, поскольку джанга будет следить за целостностью данных и уникальностью ключей. А прежде, чем накатить данные, вам необходимо будет сделать миграции для новой бд:
py manage.py migrate
Однако миграции не просто создают схему для базы данных, но и заполняют некоторые из этих таблиц. А именно auth_permission, sites и content_types, и при попытке записать данные поверх уже существующих данных с теми же ключами, мы имеем то, что имеем. Поэтому при дампе эти таблицы необходимо исключить приложения:
py manage.py dumpdata --exclude=sites --exclude=contenttypes --exclude=my_app --indent 4 > dump.json
Второй нюанс заключается в кодировке. В моем случае получившийся дамп надо было вручную перегнать в utf-8, иначе loaddata его принимала.
Есть и еще один нюанс. В примере выше, вы вероятно, заметили, что я не перечислил приложение auth, в котором лежит модель permissions, и сделал это сознательно, поскольку хотел экспортировать пользователей. Теперь чтобы избежать конфликта ключей, для loaddata необходимо явно исключить таблицу permission из:
py manage.py loaddata --exclude=auth.permission data.json
Так же стоит обратить внимание на ключ —natural-foreign. В официальной документации рекомендуют его использовать при дампе Permission и ContentType моделей.
от