Очистка базы данных через Django `manage.py`
Я хотел бы полностью удалить всю базу данных, восстановив ее так, как я ее создал, используя Django manage.py . Возможно ли это?
Ram Rachum 26 окт. 2011, в 21:31
Поделиться
Поделиться:
2 ответа
Лучший ответ
Что вы можете сделать для сброса базы данных и не иметь проблемы с миграцией (юг): сначала, reset данные из БД:
python manage.py flush
второй, подделайте уже примененные миграции:
python manage.py migrate --fake
в-третьих, если у вас есть какое-то приспособление для загрузки:
python manage.py loaddata my_sweet_json_file
Arthur Neves 26 окт. 2011, в 21:49
Поделиться
Разве вы не пропустили шаги после сброса, чтобы (1) удалить историю миграций из
user 16 янв. 2014, в 13:44
Да, вы можете использовать flush.
Это будет reset и восстановит все в вашей всей базе данных, независимо от того, какое приложение или проект находятся в моделях. Если у вас несколько баз данных, вы можете указать один, в частности, с помощью переключателя —database /p >
python manage.py flush python manage.py flush --database mydatabase
Jordan 26 окт. 2011, в 19:03
Поделиться
Действие syncdb которое выполняет flush после сброса, вызывает проблемы с моими миграциями и фикстурами. Могу ли я отменить это? Я хочу просто удалить все.
Django как очистить базу данных
Рассмотрим пример с редактированием и удалением объектов модели на примере модели Person:
from django.db import models class Person(models.Model): name = models.CharField(max_length=20) age = models.IntegerField()
Обновление
save()
Для обновления объекта также применяется метод save() :
bob = Person.objects.get(id=2) bob.name = "Bob" bob.save()
В этом случае Django полностью обновляет объект, все его свойства, даже если мы их не изменяли. Чтобы указать, что нам надо обновить только определенные поля, следует использовать параметр update_fields :
from .models import Person bob = Person.objects.get(id=1) bob.name = "Robert" bob.save(update_fields=["name"])
Это позволит повысить производительность.
update()
Другой способ обновления объектов представляет метод update() (и его асинхронная версия aupdate() ) в сочетании с методом filter , которые вместе выполняют один запрос к базе данных:
from .models import Person number = Person.objects.filter(id=1).update(name="Mike") print(result) # количество обновленных строк
В данном случае у объектов с устанавливаем для поля name значение «Mike». Метод возвращает количество обновленных строк.
Если нам не надо получать обновляемый объект, то данный способ позволит нам увеличить производительность взаимодействия с бд.
Также можно установить и большое количество полей:
Person.objects.filter(id=1).update(name="Mike", age = 33)
Иногда бывает необходимо изменить значение столбца в бд на основании уже имеющегося значения. В этом случае мы можем использовать функцию F() :
from .models import Person from django.db.models import F Person.objects.all(id=2).update(age = F("age") + 1)
В данном случае полю age присваивается уже имеющееся значение, увеличенное на единицу.
При этом важно учитывать, что метод update обновляет все записи в таблице, которые соответствуют условию.
Если надо обновить вообще все записи, вне зависимости от условия, то необходимо комбинировать метод update с методом all() :
from .models import Person from django.db.models import F Person.objects.all().update(name="Mike") Person.objects.all().update(age = F("age") + 1)
update_or_create()
Метод update_or_create (и его асинхронная версия aupdate_or_create() ) обновляет запись, а если ее нет, то добавляет ее в таблицу:
values_for_update= bob, created = Person.objects.update_or_create(id=2, defaults = values_for_update)
Метод update_or_create() принимает два параметра. Первый параметр представляет критерий выборки объектов, которые будут обновляться. Второй параметр представляет объект со значениями, которые получат выбранные объекты. Если критерию не соответствует никаких объектов, то в таблицу добавляется новый объект, а переменная created будет равна True.
bulk_update()
Метод bulk_update() (и его асинхронная версия abulk_update() ) позволяет обновить за один раз набор объектов.
bulk_update(objs, fields, batch_size=None)
Первый параметр — obj указывает на обновляемые объекты, а второй параметр — fields представляет обновляемые поля с новыми значениями. Последний параметр — batch_size указывает, сколько объектов обновляется в одном запросе (по умолчанию обновляются все объекты)
from .models import Person first_person = Person.objects.get(id=1) first_person.name = "Tomas" second_person = Person.objects.get(id=2) second_person.age = 29 number = Person.objects.bulk_update([first_person, second_person], ["name", "age"]) print(number) # 2
В данном случае у первого объекта обновляется значение поля «name», а у второго — значение поля «age». Поэтому в качестве второго параметра передается список с данными полями. Результатом метода является количество обновленных объектов.
Данный метод имеет некоторые ограничения. В частности, мы не можем обновить значение первичного ключа. Также если в обновляемом наборе есть дубли, то только первое вхождение объекта будет использоваться для обновления.
Удаление
Для удаления мы можем вызвать метод delete() (либо его асинхронную версию adelete() ) у удаляемого объекта:
person = Person.objects.get(id=2) person.delete()
Если не требуется получение отдельного объекта из базы данных, тогда можно удалить объект с помощью комбинации методов filter() и delete() :
Person.objects.filter(id=4).delete()
Удаление всех данных из таблицы:
Person.objects.all().delete()
Как пересоздать БД для проекта Django?
Нужно сделать так, чтобы Django считал, что база ранее не существовала. Чтобы можно было выполнить миграции с самого начала.
Как этого добиться?
Файл со старой БД я удалил. Но при попытке создать/выполнить миграции получаю ошибку с указанием на таблицу из удалённой БД. Как уничтожить эти связи?
- Вопрос задан более трёх лет назад
- 4457 просмотров
3 комментария
Оценить 3 комментария
Сброс миграции Django: удаление существующей базы данных и миграция в виде свежих

Drop / Delete your database Если вы используете SQLite для своей базы данных, просто удалите этот файл. Если вы используете MySQL / Postgres или любую другую систему баз данных, вам придется отказаться от базы данных, а затем воссоздать новую базу данных. Теперь вам нужно удалить весь файл миграции, кроме файла «init.py», находящегося внутри папки миграции в папке вашего приложения. Обычно папка миграции находится по адресу
/your_django_project/your_app/migrations
Теперь, когда вы удалили базу данных и файл миграции, просто запустите следующие команды, так как вы перенесли первый раз, когда вы создадите проект django.
python manage.py makemigrations
python manage.py migrate
- Удалите файл базы данных sqlite (часто db.sqlite3 ) в папке проекта django (или там, где вы его поместили)
- Удалите все, кроме файла __init__.py , из папки migration во всех приложениях django
- Внесите изменения в свои модели ( models.py ).
- Запустите команду python manage.py makemigrations или python3 manage.py makemigrations
- Затем выполните команду python manage.py migrate .
rm -f tmp.db db.sqlite3 rm -r my-app/migrations python manage.py makemigrations python manage.py migrate
Удаляет базу данных.
Удаляет миграцию из вашего приложения.
Re -r не переносить. Примечание: вы также можете: python manage.py makemigrations my-app
Миграция изменений.