Подтвердить что ты не робот

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

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

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

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

 success !

То есть, он даже не проверял, осталась ли схема в когерентном состоянии. Итак, стоит ли использовать migrate? Есть ли какие-либо преимущества по сравнению с методом Do It Yourself, связанным с передовыми методами как было предложено S.Lott? Существуют ли альтернативы sqlalchemy-migrate, фактически упрощающие процесс миграции, или я просто пытаюсь использовать migrate с плохим априори (тогда, пожалуйста, покажите мне, почему это явно превосходит создание столбцов CSV, как было предложено в ссылке выше)?

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Это прекрасно? Неа. Вы можете оставить свой дБ в плохом состоянии, но почему у вас есть версии dev/testing/production.

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