Django как очистить базу данных
Перейти к содержимому

Django как очистить базу данных

  • автор:

Очистка базы данных через 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) удалить историю миграций из \migrations & (2) запустить schemamigration с опцией —initial?

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
  1. Удалите файл базы данных sqlite (часто db.sqlite3 ) в папке проекта django (или там, где вы его поместили)
  2. Удалите все, кроме файла __init__.py , из папки migration во всех приложениях django
  3. Внесите изменения в свои модели ( models.py ).
  4. Запустите команду python manage.py makemigrations или python3 manage.py makemigrations
  5. Затем выполните команду 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
Миграция изменений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *