首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用django管理应用程序的不同数据库

使用django管理应用程序的不同数据库
EN

Stack Overflow用户
提问于 2022-06-28 06:20:50
回答 1查看 30关注 0票数 0

我理解如何通过路由器处理多个数据库,但是,如果我有两个结构相同的数据库,但在启动会话时需要根据用户选择的数据库保存信息,将如何处理。我有一个具有相应用户名和密码的会话登录,除了强制用户通过选择器选择一个数据库才能正确启动会话到应用程序之外,所选数据库的名称上的信息将在整个会话的会话cookie中移动(请原谅冗余),应用程序的所有操作都必须在access登录中最初选择的数据库上完成,如何正确路由数据库以适应这种情况?

代码语言:javascript
运行
复制
DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': env.str('NAME_DB_ZF'),
        'USER': env.str('USER_DB'),
        'PASSWORD': env.str('PASS_DB'),
        'HOST': 'localhost',
        'PORT': '3306',
    },
    'SBOJOZF': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': env.str('NAME_DB_ZF'),
        'USER': env.str('USER_DB'),
        'PASSWORD': env.str('PASS_DB'),
        'HOST': 'localhost',
        'PORT': '3306',
    },
    'SBOJOCOL': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': env.str('NAME_DB_COL'),
        'USER': env.str('USER_DB'),
        'PASSWORD': env.str('PASS_DB'),       
        'HOST': 'localhost',
        'PORT': '3306',
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-06-28 10:24:36

我会假设你在问关于多个数据库的路由问题,如果这不是你的问题,请原谅我。我认为转换器是你所需要的。

在你的urls.py

代码语言:javascript
运行
复制
from django.urls import path, register_converter

register_converter(convertors.DatabaseNameConverter, 'db_name')

urlpatterns = [
    path('<db_name:db_name>/', views.example_view),
]

然后在convertors.py

代码语言:javascript
运行
复制
from django.conf import settings


class DatabaseNameConverter:
    """
    Regex converter for URL that takes all available names of databases for routing.
    """
    regex = '('+')|('.join(settings.DATABASES.keys())+')'

    def to_python(self, value):
        return str(value)

    def to_url(self, value):
        return str(value)

然后,这只是一个查询参数,您可以在视图中使用,下面是一个示例视图:

代码语言:javascript
运行
复制
def example_view(request, db_name):
    users = User.objects.using(db_name).all()
    # Other code

或者,您可以检查使用哪个数据库来了解如何查询:db_name == "default"

删除示例:

代码语言:javascript
运行
复制
instance = User.objects.using(db_name).get(id=id)
instance.delete()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72781569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档