Django中的多个数据库

时间:2017-02-08 13:38:48

标签: django python-3.x django-database

我正在尝试使用Django创建一个Q / A网站,我想为所有应用程序使用多个数据库

  • 两个安全的数据库,如 admin,auth,forum
  • 其余
  • 的安全性较低(如sqlite3)数据库

但我不想重新配置我的模型和应用。

我该怎么做?

N.B:论坛是实现Q / A网站的应用

1 个答案:

答案 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 - 始终值得记住。