Я создал приложение Python, которое использует elixir/sqlalchemy, чтобы хранить данные. Второй релиз программного обеспечения требует, чтобы любые файлы, созданные в предыдущей версии, были обновлены, для добавления/удаления таблиц и столбцов.
Мой вопрос: как я могу достигнуть этого? Я знаю, sqlalchemy-мигрируют, но я должен сказать, что нахожу это сбивающим с толку. Это не упоминает то, что происходит с существующими данными. Кроме того, sqlite уменьшил поддержку ALTER TABLE, поэтому что мигрирует, делают, если я пытаюсь удалить столбец? Там какие-либо другие подходы к использованию, мигрируют?
То, о чем вы говорите, - хорошо известная и довольно сложная проблема. Это известно как миграция базы данных. В каждом хорошем проекте есть политика, описывающая, как следует применять схему базы данных и мутации данных для перехода от одной версии продукта к другой.
Многие фреймворки, такие как Django или Ruby on Rails, имеют встроенную систему миграции или доступную в виде плагина. В вашем случае с SQLAlchemy есть несколько вариантов:
/tmp/migrate.sql
, запишите операторы ALTER / DROP / CREATE, скрестите пальцы и примените их к своей базе SQLite. Как правило, это плохая идея, поскольку она подвержена ошибкам, но выбор остается за вами. Отсутствие полнофункционального оператора ALTER TABLE
можно обойти, создав новый столбец с желаемыми свойствами с временным именем, скопировав в него все данные из исходного столбца, удалив исходный столбец и переименовав новый столбец в исходное имя. . Тот же метод можно использовать на уровне таблицы. И вы спрашивали, что сделает SQLAlchemy-migrate, если вы попытаетесь удалить столбец. Что ж, он удалит столбец и, таким образом, удалит все данные, которые в нем были. Остальные столбцы в таблице останутся нетронутыми.
Что вас смущает в sqlalchemy-migrate? У него есть параметры --preview_sql и --preview_py для предварительного просмотра того, что он собирается делать. В общем, невозможно выполнить правильную миграцию для любого возможного случая, но вы можете изменить сгенерированный скрипт миграции в соответствии со своими потребностями. На остальное легко получить ответы, попробовав его.