2009-09-28 3 views
2

Каков наилучший способ переноса таблиц MySQL в хранилище данных Google и создание для них моделей python?Переход на GAE

У меня есть проект PHP + MySQL, который я хочу перенести в проект Python + GAE. До сих пор большое препятствие - это миграция таблиц и создание соответствующих моделей. Каждый стол имеет ширину около 110 колонок. Создание модели для таблицы вручную немного утомительно, не говоря уже о создании загрузчика и импорте созданного представления таблицы csv.

Есть ли более эффективный способ для миграции?

ответ

2

approcket может mysql⇌gae или GAE встроенный удаленный API от Google

+0

Пока что лучший, 'approcket' является ошибкой и недостаточно документирован. Он также не создает модели. – notnoop

1

В вашей обуви я бы написал сценарий Python с одним выстрелом, чтобы прочитать существующую схему MySQL (с MySQLdb), создав model.py для соответствия (затем выполните некоторые ручные проверки и изменения в сгенерированном коде, просто в случае). Это предполагает, что модель данных с «около 110» свойствами на сущность - это то, что вы довольны и хотите сохранить, конечно; возможно, стоит воспользоваться возможностью немного разобраться (действительно, вам может понадобиться, если ваш нынешний подход также зависит от объединений или других функций SQL, которые GAE не дает вам), но это, конечно, требует более ручной работы.

Как только модель данных находится на месте, может произойти bulk loading, как правило, через промежуточные CSV-файлы (существует несколько способов их создания).

+1

Вот что я разрешающие делать. Мне было интересно, если кто-нибудь создал такой инструмент уже. – notnoop

+0

@msaeed, AFAIK, до сих пор нет таких «вспомогательных средств миграции», которые публично доступны. В большинстве проектов, использующих реляционную БД, потребуется много ручного труда, чтобы тщательно денормализовать схему, чтобы избежать объединения, и т. Д., Поэтому простая механическая транскрипция схемы для моделей на самом деле не очень полезная ... :-( –

+0

@Alex , спасибо. (Un-) К счастью для меня, мои схемы уже денормализованы. – notnoop

4

В целом, генерировать ваши модели автоматически не должно тоже сложно. Предположим, у вас есть файл CSV для каждой таблицы, с линиями, состоящими из (имя поля, тип данных), то что-то, как это будет делать работу:

# Maps MySQL types to Datastore property classes 
type_map = { 
    'char': 'StringProperty', 
    'text': 'TextProperty', 
    'int': 'IntegerProperty', 
    # ... 
} 

def generate_model_class(classname, definition_file): 
    ret = [] 
    ret.append("class %s(db.Model):" % (classname,)) 
    for fieldname, type in csv.reader(open(definition_file)): 
    ret.append(" %s = db.%s()" % (fieldname, type_map[type])) 
    return "\n".join(ret) 

После того, как вы определили вашу схему, вы можете массовую загрузку непосредственно из БД - нет необходимости в промежуточных CSV-файлах. См. my blog post по этому вопросу.

1

Вы могли migrate them to django models first

В частности, использование

python manage.py inspectdb > models.py 

И редактировать models.py до удовлетворенный. Возможно, вам придется включить ForeignKeys, настроить длину CharFields и т. Д.

Я преобразовал несколько устаревших баз данных в django, как это, с большим успехом.

Модели Django, однако, отличаются от моделей GAE (которые я не очень хорошо знаю), так что это может быть не очень полезно, я не знаю!