@NyxDeveloper

Как правильно и быстро сделать переливку данных из одной базы в другую?

Делаю перелив данных из бызы в базу, но столкнулся с проблемой скорости переливки. Дело в том, что поля ForignKey каждый раз ищутся слишком долго и при каждом новом добавлении, т.к. объект не перезаписывается, а создается заново.
Вот пример функции переливки:
def load_d_merop(cursor):
    cursor.execute('SELECT * FROM d_merop')
    for row in cursor:
        obj = Merop()
        obj.id = row[0]
        obj.name = row[1]
        obj.idProj = Project.objects.get(id=row[2])
        if row[4]:
            obj.description = row[4]
        obj.save()

def LoadTables():
    conn = psycopg2.connect(dbname='vkmt', user='...',
                            password='...', host='localhost')
    cursor = conn.cursor()

    try:
        load_d_merop(cursor)
        print('merop: loaded')
    except:
        cursor.close()
        conn.close()


Это небольшая функция для переливки полей маленького объекта, но у меня есть большие объекты, с большим количеством связей и они грузятся минут по сорок. Может есть способ перелить базу лучше моего, если да, то буду рад хоть примеру, хоть документации.
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
@bacon
Основное - сделать это внутри одной транзакции. Потом по мелочи, например, если Project и подобные встречаются кучу раз, то закешировать их в словарь, чтобы каждый раз его не читать из базы.
ЗЫ если базы одного типа, то через их дамп.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы