我理解如何通过路由器处理多个数据库,但是,如果我有两个结构相同的数据库,但在启动会话时需要根据用户选择的数据库保存信息,将如何处理。我有一个具有相应用户名和密码的会话登录,除了强制用户通过选择器选择一个数据库才能正确启动会话到应用程序之外,所选数据库的名称上的信息将在整个会话的会话cookie中移动(请原谅冗余),应用程序的所有操作都必须在access登录中最初选择的数据库上完成,如何正确路由数据库以适应这种情况?
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',
}
}发布于 2022-06-28 10:24:36
我会假设你在问关于多个数据库的路由问题,如果这不是你的问题,请原谅我。我认为转换器是你所需要的。
在你的urls.py里
from django.urls import path, register_converter
register_converter(convertors.DatabaseNameConverter, 'db_name')
urlpatterns = [
path('<db_name:db_name>/', views.example_view),
]然后在convertors.py
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)然后,这只是一个查询参数,您可以在视图中使用,下面是一个示例视图:
def example_view(request, db_name):
users = User.objects.using(db_name).all()
# Other code或者,您可以检查使用哪个数据库来了解如何查询:db_name == "default"
删除示例:
instance = User.objects.using(db_name).get(id=id)
instance.delete()https://stackoverflow.com/questions/72781569
复制相似问题