Как создать новую базу данных и динамически запускать миграции в Django?

У меня есть приложение, в котором мне нужно создать новую базу данных и запустить миграции для создания таблиц. Вот моя текущая реализация:

def create_database(db_name):
    with connection.cursor() as cursor:
        try:
            cursor.execute(f"CREATE DATABASE IF NOT EXISTS {db_name}")
            return True
        except Exception as e:
            print(f"Error creating database {db_name}: {str(e)}")
            return False

Приведенный выше код успешно создает базу данных.

def run_migrations(db_name, app_names):
  
    new_db_settings = copy.deepcopy(settings.DATABASES['default'])
    new_db_settings.update({
        'NAME': db_name,
    })

    settings.DATABASES['default'] = new_db_settings

    try:
 

        with TemporaryOverrideSettings({'default': new_db_settings}):
            call_command('makemigrations', app_names) 
            call_command('migrate', app_names, database=db_name)
    except Exception as e:  # Handle potential errors gracefully
        print(f"Error encountered while checking migrations: {e}")

Функция run_migrations предназначена для запуска миграций. Команда makemigrations выполняется успешно, но команда migrate не работает для новой базы данных.

Мое требование заключается в том, чтобы всегда создавать базу данных и запускать миграции при каждом запросе. Однако, поскольку новых изменений может не быть, миграции не нужно запускать каждый раз.

Выпуск:

После выполнения команды makemigrations.

команда migrate не работает так, как ожидалось, для новой базы данных.

Вопросы:

Как убедиться, что команда migrate корректно выполняется на новой базе данных? Есть ли лучший подход для обработки динамического создания и миграции баз данных в Django? Любая помощь или предложения будут очень признательны. Спасибо!

После выполнения команды makemigrations.

команда migrate не работает так, как ожидалось, для новой базы данных.
Вернуться на верх