Django 在运行时动态创建数据库(不将请求路由到正确的数据库)

问题描述 投票:0回答:1

如何在运行时动态地为每个租户创建一个新数据库。

所有示例都硬编码到设置文件中。但是当新租户 t1 注册时, 我想为 t1 创建一个新数据库。当 t2 连接时,我希望能够在运行时创建 t2_db,以运行任何迁移或服务器重新启动。 假设我们有一个默认数据库,我们可以在其中进行迁移(空),我们只需将其复制到 t1 和 t2。 或者有没有一种方法可以在不重新启动服务器的情况下运行迁移。 或者人们只是重新启动服务器(疯狂吧) 如果不是,我正在考虑 docker。

谢谢

python-3.x django database postgresql multi-tenant
1个回答
0
投票

您可以利用

call_command
功能对指定数据库执行迁移,而无需重新启动服务器。此外,您可以在数据库创建过程中调用此命令。但是,要动态路由数据库,您必须动态添加数据库连接。重要的是要注意
you'll need to add a database connection every time the server restarts

from django.core.management import call_command


# After creating db. Update the db connection.
settings.DATABASES[f"db_name"] = {
            "ENGINE": "db_engine",
            "NAME": "db_name",
            "USER": "db_user",
            "PASSWORD": "db_password",
            "HOST": "db_host",
            "PORT": "db_port",
        }
call_command("migrate", database="db_name")

此代码仅供参考。创建单独的函数来添加 db_connections。

© www.soinside.com 2019 - 2024. All rights reserved.