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