Есть ли средство автоматизации SQLAlchemy, например South для Django?
Есть ли средство автоматизации SQLAlchemy, например South для Django?
Я посмотрел на sqlalchemy-migrate, но он, похоже, не создает сценарии обновления sql автоматически или не обновляет DB
Похоже, что с sqlalchemy-migrate вам нужно
a) вручную скопируйте свою старую модель в новый файл
б) вставить новую модель в приложение и скопировать ее в новый файл
c) писать вручную создавать/отбрасывать/изменять таблицы в расширенном диалекте python sqlalchemy
d) сгенерировать sql alter script
e) выполнить команду для выполнения alter sql script
Что касается меня, это не решает проблему и только добавляет накладные расходы, поскольку я могу просто выполнить d) вручную, и это будет намного быстрее, чем делать a), b), c) вручную только до d), что вы можете сделать за один шаг.
Есть ли какие-либо автоматические библиотеки миграции для SQLAlchemy, например South для Django, или многие инструменты для преобразования в RoR?
Мне нужно изменить модель SQLAlchemy в приложении python, запустить инструмент и сравнить текущую схему БД с новой схемой БД, которую должна использовать новая модель, и создать скрипты Alter, которые я могу настроить вручную и выполнить.
Есть ли такое решение в Python?
Ответы
Ответ 1
Вы можете выполнить автоматическую миграцию с Alembic. Я использую его в двух крупных проектах, над которыми я сейчас работаю. Автоматический генератор миграции может распознавать:
- Таблица добавления и удаления
- Добавление и удаление столбцов
- Изменение обнуляемого статуса на столбцах
- Основные изменения в индексах, уникальные ограничения с явным именем и внешние ключи
(см. также: https://alembic.sqlalchemy.org/en/latest/autogenerate.html).
Установить алембик
pip install alembic
или (в зависимости от используемой версии Python):
pip3 install alembic
Настроить алембик
Выполните следующую команду в вашем проекте:
alembic init alembic
Это настроит alembic для вашего проекта в папке с именем alembic
.
Затем вам нужно будет отредактировать сгенерированный alembic.ini
конфигурации alembic.ini
.
В файле env.py
сообщите Alembic, где найти объект metadata
SQLAlchemy в вашем проекте.
(см. также: https://alembic.sqlalchemy.org/en/latest/tutorial.html#editing-the-ini-file).
Генерация миграции
Просто выполните следующую командную строку:
alembic revision --autogenerate -m "Message for this migration"
Или даже (не рекомендуется):
alembic revision --autogenerate
Обновите базу данных
После этого я alembic.ini
базу данных с помощью этой простой команды из папки, содержащей alembic.ini
конфигурации alembic.ini
:
alembic upgrade head
(см. также: http://rodic.fr/blog/automatic-migrations-sqlalchemy-alembic/)
Ответ 2
Существует Alembic, который выглядит очень многообещающим, но проблема (на данный момент) заключается в том, что поддержка баз данных SQlite очень ограничена.
Ответ 3
В настоящий момент нет. Alembic требует, чтобы вы написали код о добавлении/удалении/изменении структуры таблицы или создании/удалении таблицы. Поэтому для sqlalchemy ничего подобного django south не существует.
Ответ 4
Вы изучали использование sqlalchemy-migrate
?
http://shane.caraveo.com/2010/09/13/database-migrations-for-sqlalchemy-part-duex/