gpt4 book ai didi

Django-运行时数据库切换

转载 作者:行者123 更新时间:2023-12-04 04:30:07 25 4
gpt4 key购买 nike

在我的工作中,我们要运行带有多个数据库的服务器。当您访问http://myapp.webpage.comhttp://other.webpage.com之类的URL时,应该发生数据库切换。我们只想运行一个服务器实例,并在HTTP请求时切换数据库并返回相应的响应。

我们一直在寻找一种可维护且“Django友好”的解决方案。在我们的调查中,我们找到了可行的方法,但是我们没有足够的信息。

选项1:Django中间件

django中间件在服务器每次接收到HTTP请求时运行。

  • 在此处进行数据库切换可能是最好的选择,但就我所知,使用django database routers仅允许更改模型或组或模型的数据库。
  • 另一个选项是在中间件中设置django model manager实例,并强制所有模型从自定义中间件中的添加属性中重新分配objects属性。
  • 我的最后一个选择是在中间件接收到的请求对象中创建一个新属性,该对象从database alias返回settings.py,并且在每个模型查询中都使用using method

  • 选项2:基于类的 View 混合

    创建一个使用过去三个选项的mixin,但是我 必须在所有基于类的 View 中设置mixin。如果程序员忘记设置mixin并将其引入生产服务器,则数据可能会(或不再存在)正确的数据库中,我也不想冒险。

    选项3:在运行时更改数据库设置

    此选项有效,但是 Is not recommended且风险太大。

    更新:

    这如何运作?

    middlewares.py
    import django.conf as conf
    import os.path


    class SelectDB(object):

    def process_request(self, request):
    print request.META['HTTP_REFERER']
    file_database = open("booklog/database.txt", "r")
    database = file_database.read(10)
    file_database.close()
    if database != 'default':
    conf.settings.DATABASES['default']['NAME'] = database

    任何帮助我们解决的信息将不胜感激。

    最佳答案

    答案(对我有用)
    这个问题已经回答here, in stackoverflow。我希望此功能在django中。很难找到使之成为可能的方法。
    我认为,评论djt_a与django插件Wilduck所做的出色工作非常重要,它是一个出色的插件,可以(以某种不同的方式)实现此操作。
    非常感谢@JL Peyret和@ire_and_curses。
    并作为@ire_and_curses的答案。至少在此刻,在我正在工作的项目中,这就是我们所需要的。在以前的项目中,我们需要类似的行为,并且使每个实例中的一台服务器很难维护和更新每台服务器,甚至使过程自动化。

    关于Django-运行时数据库切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30226604/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com