Как создать новую базу данных и динамически запускать миграции в 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 не работает так, как ожидалось, для новой базы данных.