Перенос данных из старой базы данных в новую

В настоящее время я создаю новую версию веб-приложения, и у меня есть существующая база данных. Теперь я хочу иметь новую базу данных для новой версии, поскольку существующая база данных не совсем оптимальна. Я не могу изменить старую базу данных, так как она все еще используется в производстве.

Могу ли я каким-то образом создать новую таблицу базы данных и заполнить ее измененными версиями данных из старой?

Например, представим, что у меня есть старая модель:

class UserNumbers(model.Model):
    id=models.IntegerField(primary_key=True)
    name=models.CharField(max_length=50, blank=True, null=True)
    phone_number1=models.CharField(max_length=50, blank=True, null=True)
    phone_number2=models.CharField(max_length=50, blank=True, null=True)
    phone_number3=models.CharField(max_length=50, blank=True, null=True)

и хочу заполнить мою новую модель:

from phone_field import PhoneField

class User(model.Model):
    id=models.IntegerField(primary_key=True)
    name=models.CharField(max_length=50, blank=True, null=True)
class UserNumbers(model.Model):
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    phone_number = PhoneField(help_text='Contact phone number')
    comment = models.CharField()

Итак, есть ли какой-нибудь способ, например:

for data in UserNumbers_old:
    User_new(id=data.id,name=data.name).save()
    if data.phone_number1:
         UserNumbers_new(user_id=data.id,phone_number=data.phone_number1,comment="")
    ...
        

Да, вы можете это сделать. Но если у вас действительно производственная система, то безопаснее всего будет:

  • Создайте новую базу данных , а не просто новую таблицу.
  • Скопируйте все таблицы (резервное копирование из старой базы данных, загрузка в новую; точная процедура будет отличаться для MySQL и PostgreSQL, и т.д.) из старой базы данных в новую базу данных.
  • Используйте
  • migrations от Django для преобразования структур таблиц с целью оптимизации, добавления новых полей и т.д..
  • Если прямые миграции не справляются со всем (например, исходя из этого примера, нужно создать 1, 2 или 3 записи UserNumbers для каждого пользователя в зависимости от того, сколько телефонных номеров на самом деле в существующих записях), тогда вы создаете
  • миграцию данных для преобразования.
  • Миграция данных может делать все, что может делать обычная программа на Python. Но ее преимущество в том, что однажды, когда вы захотите обновить производственную систему, вы сможете:

    • Резервное копирование (всегда, чтобы быть в безопасности) базы данных
    • Запустите все миграции структуры базы данных и данных в одном пакете, а Django позаботится о деталях. Вам не нужно будет помнить, что "миграция" данных должна выполняться между регулярными миграциями 17 и 18, потому что на самом деле это будет # 18, а следующая регулярная миграция будет 19 и т.д.
    • .
    • Миграция не будет зависеть от наличия двух разных баз данных. Вместо этого все (будь то в разработке (сейчас) или в производстве (позже)) будет одной и единственной базой данных, насколько это касается Django.
Вернуться на верх