Как перенести данные Drupal в Django? - PullRequest
6 голосов
/ 18 февраля 2011

Я хочу перенести часть сайта Drupal 6 в приложение Django, в частности раздел вопросов и ответов на основе Drupal, который, я думаю, будет лучше работать с OSQA . Я уже создал еще один вопрос, связанный с аутентификационной частью этой интеграции, и для целей этого вопроса мы можем предположить, что все пользователи Drupal будут воссозданы, по крайней мере, их имена пользователей, в базе данных Django. Этот вопрос касается переноса данных из Drupal в Django.

В Drupal у меня все вопросы как узлы типа контента 'question' с некоторыми полями CCK, и ответы на эти вопросы являются стандартными комментариями. Мне нужна помощь, чтобы найти лучший способ перенести эти данные в OSQA в Джанго.

Сначала я подумал, что могу использовать Юг, но я не уверен, что он лучше всего подойдет для моих нужд.

Пока что я думаю, что мой лучший подход - написать приложение Django, которое подключается к базе данных Drupal, запрашивать все вопросы с соответствующими комментариями и пользователями, а затем вставлять напрямую в базу данных Django, используя правильные модели и методы Django.

Я на правильном пути? Любые другие предложения?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 18 февраля 2011

Сначала я подумал, что могу использовать Юг, но я не уверен, что он лучше всего подойдет для моих нужд.

Нет, Юг не для такого рода миграции,Он предназначен для внутрипроектных миграций, и вы захотите его иметь, но он вам здесь не очень полезен.

«Миграция» на самом деле не подходит для того, что вам нужно.Что вы действительно хотите сделать, так это экспортировать данные из Drupal и импортировать их в Django.

Я не провел углубленный анализ возможных решений дляэто, но если бы меня попросили сделать то же самое, я бы просто определил формат обмена на основе JSON или XML для передачи, затем написал один набор кода для экспорта данных из Drupal в этот формат, затем другой для импорта данныхиз этого формата в Джанго.Я настоятельно рекомендую не использовать двоичный формат для этого обмена;способность загружать данные в текстовый редактор для проверки ваших данных и исправления вещей очень важна.

Пока я думаю, что мой лучший подход - написать приложение Django, которое подключается к базе данных Drupal.запросите все вопросы с соответствующими комментариями и пользователями, а затем вставьте их непосредственно в базу данных Django, используя правильные модели и методы Django.

Если вы хотите пропустить файл обмена и сделать это за один шагтогда вы не хотите писать новое приложение Django только для импорта;это (ИМХО) излишество.Вам нужно написать команду управления Django в приложении, в которое вы будете импортировать данные, и вы, вероятно, захотите использовать поддержку Django для нескольких баз данных , а также свойства модели (например, db_table и db_column) для использования существующих схем базы данных.Вот почему я рекомендую метод обмена файлами: вам не нужно переопределять таблицы Drupal в моделях Django.

1 голос
/ 23 января 2016

Ответ Майка - хороший путь для подражания.Однако в реальном сценарии вы можете найти полезным смешивать различные методы, например, подключаться к исходной базе данных Drupal для файлов, ссылающихся на локальный каталог для содержимого файла (запрос к файлам является простым объединением из нескольких таблиц), но обрабатывая наиболее структурированные данные с помощьюпользовательское представление JSON (например, узлы).

В этом случае представление JSON, созданное с помощью модуля Источник данных видов , может помочь вам спроектировать и выбрать ваши данные с помощью простого представления Drupal.Затем вы можете написать команду управления , чтобы прочитать и проанализировать данные, как предлагалось ранее.Вы должны просматривать страницу так, чтобы не требовалось слишком много обработки, и вы даже можете выполнять асинхронные запросы для ускорения поиска, используя gevent .

Таким образом, я проанализировал более 15 КБ содержимого менее чем за 10 минут, не так быстро, но приемлемо для одноразового импорта.Если вы хотите сохранить контент для последующей обработки, вы можете сохранить необработанные данные в пользовательской модели в базе данных или в оперативной памяти redis через Python интеграция redis .Если вам нужны подробности, я написал подробное руководство по миграции на Drupal-Django , углубляющее эти техники.

...