Django 数据库迁移问题

导出

执行./manage.py dumpdata -a > data.json即可完成导出

导入

1. ./manage.py loaddata 的方式导入

优点:
* 方便,不容易出问题
缺点:
* 性能慢

2. 自定义脚本导入

from collections import defaultdict
from django.core import serializers
from django.db import transaction
from django.db.models import sql
from django.db import connections
connection = connections['default']
obj_dict = defaultdict(dict)
deserialized = serializers.deserialize('json', open('/data/chat.json'))
# organize by model class
for item in deserialized:
  obj = item.object
  if obj._meta.app_label == 'chat':
    obj_dict[obj.__class__][str(obj.pk)] = obj

with transaction.atomic():
    for cls, objs in obj_dict.items():
        # cls.objects.bulk_create(objs)
        fields = cls._meta.local_concrete_fields
        query = sql.InsertQuery(cls)
        query.insert_values(fields, objs.values())
        query.get_compiler(connection=connection).execute_sql()


其他

跨数据库迁移

pgloader
pgloader \
--debug \
pgsql://source:5432/chat \
pgsql://target:5432/chat_test