Заполните приложение Django данными, используя очень большой скрипт Python - PullRequest
0 голосов
/ 24 марта 2009

Я написал программу, которая выводит программу на Python, которая заполняет мое приложение Django данными. Однако эта программа имеет размер 23 МБ, и мой компьютер ее не запускает. Есть ли решение для этого?

Другим возможным решением для заполнения базы данных было бы использование прибора. Проблема в том, что я еще не знаю новые первичные ключи ... или мне придется использовать старые (которые я не предпочитаю).

Есть предложения?

Причина моего пути: я перемещаю базу данных, которая сильно отличается от новой, у нее также много связей. Программа размером 23 МБ запоминает все объекты из исходной базы данных, поэтому ее нелегко разрезать пополам. Может быть, есть лучший способ сделать это? Я предпочитаю использовать Django, чем использовать сырой SQL.

Ответы [ 4 ]

1 голос
/ 24 марта 2009

В большинстве случаев вы можете найти естественную иерархию ваших объектов. Иногда существует какой-то «мастер», и все другие объекты имеют ссылки внешнего ключа (FK) на этот мастер и друг на друга.

В этом случае вы можете использовать XML-подобную структуру с каждым главным объектом, «содержащим» множество вспомогательных объектов. В этом случае вы сначала вставляете мастер, и все дочерние элементы имеют ссылки FK на существующий объект.

В некоторых случаях, однако, существуют отношения, которые не могут быть простыми FK для существующего объекта. В этом случае у вас есть циклические зависимости, и вы должны (1) временно отключить эту зависимость и (2) воссоздать зависимость после загрузки объектов.

Вы делаете это путем (a) определения вашей модели для необязательного FK, (b) и наличия временной ссылки «естественного ключа». Вы будете загружать данные без правильного FK (это необязательно).

Затем, после загрузки ваших данных, вы возвращаетесь ко второму проходу и вставляете все недостающие ссылки FK. После этого вы можете изменить свою модель, чтобы сделать обязательным FK.

Программа 1 - экспорт из старой базы данных в простой плоский файл. Формат CSV или JSON или что-то простое.

for m in OldModel.objects.all():
    aDict = { 'col1':m.col1, 'old_at_fk':m.fktoanothertable.id, 'old_id':id }
    csvwriter.writerow( aDict )

Программа 2 - чтение простого плоского файла; построить новые объекты модели базы данных.

# Pass 1 - raw load

for row in csv.reader:
    new= NewModel.create( **row )

# Pass 2 - resolve FK's

for nm in NewModel.objects.all():
    ref1= OtherModel.objects.get( old_id=nm.old_at_fk )
    nm.properfk = ref1
    nm.save()
0 голосов
/ 24 марта 2009

Поместите данные в отдельный файл (или файлы). Затем напишите небольшую программу, которая считывает данные и заполняет вашу базу данных через Django.

0 голосов
/ 24 марта 2009

Если я правильно читаю ваш пост, вы читаете из старой базы данных и пишете «программу на python» на основе этих данных. Мне кажется, это неправильный способ сделать это.

Мое предложение состояло бы в том, чтобы создать гибкую версию старой базы данных (XML подойдет для этого), прочитав данные из БД, изменив их при необходимости, а затем выгрузив их в файл.

С этой гибкой версией данных используйте отдельную программу для импорта этих данных в новую базу данных через ваши модели Django.

Это также даст вам уровень гибкости, если вам когда-нибудь понадобится продублировать этот процесс.

0 голосов
/ 24 марта 2009

Ваш компьютер не запускается, потому что это большая программа?

Может быть, вам следует сослаться на внешний файл или файлы со всей структурой, а затем вывести его в базу данных, вместо того, чтобы записывать его в свой скрипт / программное обеспечение ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...