我正在尝试使用Django创建一个Q / A网站,我想为所有应用程序使用多个数据库
但我不想重新配置我的模型和应用。
我该怎么做?
N.B:论坛是实现Q / A网站的应用
答案 0 :(得分:4)
我的意思是,你显然需要进行一些重新配置。
从广义上讲,将最常用的数据库设置为默认数据库,将另一个数据库设置为其他数据库 - 这是根据生产网站中的某个数据库列表改编的。
arr.length = Math.min(arr.length, 5)
然后,您可以使用DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'databasename',
'USER': 'mydefaultuser',
'PASSWORD': 'novelpassword',
'HOST':'first-host.com',
'PORT':'3306'
},
'auth': {
'ENGINE': 'sqlserver_pymssql',
'HOST': 'myserver.com',
'NAME': 'myauthdatabase',
'PASSWORD': 'passwordhere',
'PORT': 1433,
'USER': 'username'
}}
在视图中明确使用其他数据库:
using
...或者最好,您可以使用Database Router:
更广泛地设置它User.objects.using('auth').all()
在您的设置文件中添加class AuthRouter(object):
"""
A router to control all database operations on models in the
auth application.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read auth models go to auth_db.
"""
if model._meta.app_label == 'auth':
return 'auth_db'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write auth models go to auth_db.
"""
if model._meta.app_label == 'auth':
return 'auth_db'
return None
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the auth app is involved.
"""
if obj1._meta.app_label == 'auth' or \
obj2._meta.app_label == 'auth':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the auth app only appears in the 'auth_db'
database.
"""
if app_label == 'auth':
return db == 'auth_db'
return None
- 这些只是从上面链接的文档中提取的示例,但它相对简单。
我会说,除非你有一个超级清晰简洁的理由为什么你想要这样做,否则不要这样做。您可以在一个数据库中处理所有这些,并且只要您进入多个数据库路径,就可以立即获得cross-database limitations - 始终值得记住。