2015-03-05 5 views
1

Я работаю над переносом данных для приложения Django, чтобы заполнить основную таблицу в db с данными, которые будут составлять основу . Приложение - это постоянные/постоянные данные, которые могут быть добавлены, но никогда не удалялся.Перенос данных в Django

Моя ссылка документация Django 1.7 и, в частности, в примере на стр

https://docs.djangoproject.com/en/1.7/ref/migration-operations/#django.db.migrations.operations.RunPython

с пользовательский метод под названием forward_funcs:

def forwards_func(apps, schema_editor): 

# We get the model from the versioned app registry; 
# if we directly import it, it'll be the wrong version 

Country = apps.get_model("myapp", "Country") 
db_alias = schema_editor.connection.alias 
Country.objects.using(db_alias).bulk_create([ 
Country(name="USA", code="us"), 
Country(name="France", code="fr"),]) 

Я предполагаю, что аргумент bulk_create является список объектов Country объектов, а не namedtuple объектов, хотя формат выглядит точно так же. Это тот случай, и кто-то может объяснить, что такое db_alias?

Кроме того, если я хочу изменить или удалить существующие записи в таблице, используя миграцию данных, какие методы соответствуют bulk_create для этого?

Заранее благодарим за любую помощь.

ответ

2

Страна такая же, как и вы, from app.models import Country. Единственное отличие: импорт всегда дает вам последнюю модель и apps.get_model в процессе миграции дает вам модель во время миграции. Он продолжает редактировать модель в начальной миграции.

О bulk_create; его аргумент действительно представляет собой список несохраненных объектов Country и использует его для создания огромной вставки в ваш db. Более подробную информацию о bulk_create можно найти здесь; https://docs.djangoproject.com/en/1.7/ref/models/querysets/#bulk-create.

О db_alias, это имя базы данных, которую вы установили в своих настройках. В большинстве случаев это default, поэтому вы можете оставить его в своем коде, если используете только одну базу данных. Вероятно, функция будет вызвана более одного раза, если у вас больше баз данных, установленных в ваших настройках. Больше информации о using; https://docs.djangoproject.com/en/1.7/ref/models/querysets/#using.

Полное удаление на самом деле довольно просто, вы просто фильтруете свои страны и вызываете delete в запросе. Так что-то вроде;

Country.objects.filter(continent="Europe").delete() 

О постоянном/постоянном вопросе данных у меня на самом деле нет решения для этого. Я думаю, что одна вещь, которую вы можете сделать, перезаписывает функцию .delete() для модели и менеджера.

Смежные вопросы