Я использую SQLite в качестве формата файла приложения (см. здесь, чтобы узнать, почему вам это нужно) для моих основанных на PySide настольное приложение. То есть, когда пользователь использует мое приложение, его данные сохраняются в одном файле базы данных на его компьютере. Я использую SQLAlchemy ORM для связи с базами данных.
По мере выпуска новых версий приложения я могу изменять схему базы данных. Я не хочу, чтобы пользователям приходилось выбрасывать свои данные каждый раз, когда я меняю схему, поэтому мне нужно перенести их базы данных в новейший формат. Кроме того, я часто создаю временные базы данных, чтобы сохранить подмножества данных для использования с некоторыми внешними процессами. Я хочу создать эти базы данных с помощью alembic, чтобы они были помечены правильной версией.
У меня есть несколько вопросов:
Есть ли способ вызвать алембик из моего кода Python? Мне кажется странным использовать
Popen
в чистом модуле Python, но в документации просто используется алембик из командной строки. В основном мне нужно изменить расположение базы данных туда, где находится база данных пользователя.Если это невозможно, могу ли я указать новое расположение базы данных из командной строки, не редактируя файл .ini? Это сделало бы вызов перегонного куба через
Popen
несложным.Я вижу, что alembic хранит информацию о своей версии в простой таблице с именем
alembic_version
, с одним столбцом с именемversion_num
и одной строкой, определяющей версию. Могу ли я добавитьalembic_version
таблицу в мою схему и заполнить ее последней версией при создании новых баз данных, чтобы избежать накладных расходов? Это вообще хорошая идея; мне просто использовать alembic для создания всех баз данных?
У меня алембик отлично работает с единственной базой данных, которую я использую для разработки в каталоге моего проекта. Я хочу использовать alembic для удобной миграции и создания баз данных в произвольных местах, желательно через какой-то Python API, а не из командной строки. Это приложение также заморожено с помощью cx_Freeze, если это имеет значение.
Спасибо!