如何在运行时给出数据库名称并将所有更改迁移到它

Posted

技术标签:

【中文标题】如何在运行时给出数据库名称并将所有更改迁移到它【英文标题】:How to give database name in runtime and migrate all changes to it 【发布时间】:2019-06-06 01:29:34 【问题描述】:

如何迁移名称由用户定义的数据库中的更改。我试着给

data = request.data
cursor = connection.cursor()
cursor.execute("create database " + data["database"])
DATABASES["default"]["NAME"] = data["database"]
call_command("makemigrations")
call_command("migrate")

但这不起作用。有什么办法吗?

【问题讨论】:

问题不清楚的可以多解释一下在做什么,想要什么。 call_commend 用于运行时,主要用于测试中的测试,并尝试将commend更改为call_command("./manage.py makemigrations")call_command("./manage.py migrate") @NVS 我正在运行时使用用户定义的名称创建一个数据库,并尝试迁移数据库中的表。我能够轻松地创建数据库,但无法迁移数据库中的表。我有什么办法吗? 好的,试试我在上面评论的这些推荐,我认为这会奏效。 当我尝试@NVS 时,错误以未知命令的形式出现:'./manage.py makemigrations' 【参考方案1】:
DATABASES.update('users1': 
                'ENGINE': 'django.db.backends.mysql',
                'NAME': data["database"],
                'USER': 'root',
                'PASSWORD': 'root',
                'HOST': 'localhost',
                'PORT': '3306',
                'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0,
                'OPTIONS': , 'TIME_ZONE': None,
                'TEST': 'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None
            
            )
            call_command("makemigrations")
            call_command('migrate', database='users1', interactive=False, skip_checks=True)

这段代码对我有用

【讨论】:

以上是关于如何在运行时给出数据库名称并将所有更改迁移到它的主要内容,如果未能解决你的问题,请参考以下文章

数据库迁移:单个创建脚本与更改集

如何编辑数据库迁移?

Prisma:所有迁移都已应用

运行显式创建表的迁移时未创建 Django 表。

如何加密文件和隐藏密码

如何使用 laravel 迁移和种子正确处理数据库数据更改