gpt4 book ai didi

mysql - Django 在运行时修改 DATABASE_HOST

转载 作者:搜寻专家 更新时间:2023-10-30 23:24:24 25 4
gpt4 key购买 nike

我试图在运行时在 2 个 mysql 服务器之间切换。我不需要一直保持两个连接都处于事件状态。

这就是我做的

from django.conf import settings
from django.db import connection
from django.contrib.auth.models import User

connection.close()
setattr(settings, 'DATABASE_HOST', 'mysql1.com')
list1 = User.objects.all()

connection.close()
setattr(settings, 'DATABASE_HOST', 'mysql2.com')
list2 = User.objects.all()

我有以下设置.py:

DATABASE_HOST = '' # localhost
DATABASE_NAME = test
...

数据库名称在所有服务器上都相同,只是每个表的内容不同。

我应该得到 list1 != list2,因为两台服务器上的用户不同。

问题是我总是从 settings.py(在本地主机上运行)中定义的默认数据库中获取用户列表,而不是从 mysql 1 服务器然后从 mysql 2 服务器获取用户列表。

知道我在这里做错了什么吗?

劳伦特

最佳答案

根据这些信息,我的猜测是您设置的 DATABASE_HOST 行(在上面的伪代码中)中存在潜在错误。阅读:“setattr(设置...”

除此之外,我不确定您是如何配置数据库以根据您的条件进行切换的,因为您还没有对此进行解释。如果您按模型执行此操作,可能值得考虑 Django 如何知道这一点,甚至使用外部连接(手动加载数据库驱动程序并在渲染阶段之前手动运行命令),并使用 main。

我会询问整个方法,但主要是因为我不确定您实际上是如何区分这两个数据库的,或者为什么。你能提供更多关于你如何做的信息吗?我假设您在上面的点 2 和点 5 中提取的变量是不同的。我不需要这些值,我只是确保您没有使用旧代码重复而忘记编辑它(我们都去过那里)。

注意:如果可以的话,我会将其作为评论发布,但我认为解决方案可能取决于您如何提取变量。最后,如果您处于“开发”/调试(离线/非生产)模式,您可以尝试将数据库名称(只是服务器 IP 或其他)添加到输出中,以检查它是否真的进入了第二个服务器。

关于mysql - Django 在运行时修改 DATABASE_HOST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1704746/

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