Стоит ли использовать sqlalchemy-migrate?

У меня есть веб-приложение, использующее sqlalchemy (в пределах Pylons). Мне нужно эффективно изменить схему, чтобы иметь возможность менять рабочую версию, по крайней мере, ежедневно, а может и больше, без потери данных.

В выходные я немного поиграл с sqlalchemy-migrate и скажу, что это произвело на меня плохое впечатление. Сначала я думаю, что это не может помочь с миграцией между двумя движками баз данных; это то, что, вероятно, может быть сделано только с помощью sqlalchemy. Во-вторых, документы не выглядят актуальными. Мне пришлось изменить некоторые параметры командной строки, например, указав путь к репозиторию для каждой команды, это может быть ошибкой переноса.

Но самое плохое это команда manage.py test. Мало того, что он на самом деле изменяет базу данных (этот момент четко указан в документации, поэтому я не могу винить миграцию), но мой первый скрипт миграции только что сделал простую глупую миграцию схемы, оставив обновленную пониженную версию базы данных с схемой, отличной от оригинальной. Но "manage.py test" только что ответил что-то вроде

 success !

То есть он даже не проверял, была ли схема оставлена ​​в связном состоянии. Так стоит ли использовать миграцию? Есть ли какое-либо преимущество по сравнению с методом "Сделай сам", связанным с передовой практикой, предложенным С.Лоттом? Существуют ли альтернативы sqlalchemy-migrate, которые на самом деле упрощают процесс миграции, или я просто пытаюсь использовать миграцию с плохой априори (тогда, пожалуйста, покажите мне, почему явно не лучше создавать столбцы CSV, как предложено в ссылке выше)?

Большое спасибо!

3 ответа

Решение

Вместо этого используйте Alembic:

http://pypi.python.org/pypi/alembic

Спасибо за комментарии, отредактированные, чтобы добавить некоторые рассуждения -

Он разработан автором SQLAlchemy, он совершенно новый и хорошо поддерживается. Я не знаю достаточно о sqlalchemy-migrate, чтобы дать хорошее сравнение. Но я быстро прочитал четкие и краткие документы Alembic, а затем получил свою собственную автоматически сгенерированную миграцию, работающую в очень короткое время.

Автогенерация: не единственный режим работы, но если вы выберете, Alembic прочитает конфигурацию sqlalchemy вашего приложения (например, ваши декларативные классы моделей, которые устанавливают все ваши таблицы, ограничения и сопоставления) и сравнит с фактическим текущим состоянием вашего базы данных, и вывести скрипт Python, который представляет дельту между ними. Затем вы передаете этот скрипт команде обновления Alembic, и все, что нужно, различия устранены. Обычно требуется небольшой объем редактирования сценария миграции вручную, и это (а) просто природа миграции и (б) то, что вы хотите сделать в любом случае, чтобы убедиться, что вы полностью осведомлены о точных шагах миграции собираюсь выступить, прежде чем запустить его.

Alembic также обеспечивает DVCS-подобную возможность отслеживания ваших миграций. Это позволяет легко вернуться к любому прошлому состоянию вашей схемы БД.

Alembic не работает ( http://pypi.python.org/pypi/alembic) и поддерживается автором SQLAlchemy, а также учитывая тот факт, что разработка sqlalchemy-migrate выглядит застопорившейся, а в этом году коммитов практически не было ( http://code.google.com/p/sqlalchemy-migrate/source/list), я думаю, что больше не стоит его использовать, я переключу свой текущий проект на Alembic.

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

Я лично люблю использовать это. Это здорово, потому что новые установки (dev, test, prod) могут быть загружены очень легко. И не только это, но и предоставляет дом для приложения по мере его роста и обеспечивает хорошие точки входа для тех миграций, которые должны происходить при переходе от версии к версии вашего приложения. Что-то нужно для изменения /etc на серверах разработки, тестирования и производства.

Это идеально? Нету. Вы можете оставить свою базу данных в плохом состоянии, но именно поэтому у вас есть dev/testing/production версии вещей.

Лично я использую его для начальной загрузки своих модульных тестов в пилонах, используя sqlite db для запуска модульных тестов, но мы используем mysql в производстве. Таким образом, есть некоторые кросс-платформенные рекомендации по его использованию.

Другие вопросы по тегам