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