このためにデータ移行を使用できます。あなたの空の移行で
$ python manage.py makemigrations yourappname --empty
、あなたのデータをロードし、migrations.RunPython
操作を追加するための関数を作成:まず、アプリの空の移行を作成します。ここDjango documentation on migrationsから1の修正版です:
from __future__ import unicode_literals
from django.db import migrations
def stream_from_api():
...
def load_data(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Person = apps.get_model('yourappname', 'Person')
for item in stream_from_api():
person = Person(first=item['first'], last=item['last'], age=item['age'])
person.save()
class Migration(migrations.Migration):
dependencies = [('yourappname', '0009_something')]
operations = [migrations.RunPython(load_data)]
あなたは、単純なデータの多くを持っている場合、あなたはバルクの作成方法から利益を得るかもしれません:
from __future__ import unicode_literals
from django.db import migrations
def stream_from_api():
...
def load_data(apps, schema_editor):
# We can't import the Person model directly as it may be a newer
# version than this migration expects. We use the historical version.
Person = apps.get_model('yourappname', 'Person')
def stream_people():
for item in stream_from_api():
yield Person(first=item['first'], last=item['last'], age=item['age'])
# Adjust (or remove) the batch size depending on your needs.
# You won't be able to use this method if your objects depend on one-another
Person.objects.bulk_create(stream_people(), batch_size=10000)
class Migration(migrations.Migration):
dependencies = [('yourappname', '0009_something')]
operations = [migrations.RunPython(load_data)]
移行ができるという利点を持っています自動的にトランザクションに格納されるので、いつでも移行を停止することができ、データベースが不整合な状態になることはありません。
Djangoの 'manage.py loaddata'はテキストファイルを解析してデータベースに挿入します。最初の移行では、[リンクされたドキュメント](https://docs.djangoproject.com/en/1.11/howto/initial-data/#providing-initial-data-html)の下部にあるように、プログラムで行うことができます移行あり)。 – Blender
はい、テキストファイルを作成しないようにしています。不要です。 – Darkstarone
移行には、ハードコードされた初期データが含まれている必要はありません。Pythonスクリプトです。 'RunPython'のマイグレーションを使用して、APIからデータをストリーミングしてデータベースに挿入する関数を作成するだけです。最初の移行が実行されると自動的に実行され、移行ではトランザクションが自動的に利用されるため、データベースの状態が破壊されることはありません。 – Blender