项目需要连接多个不同的数据库,不同的应用操作不同的库。
以下是具体的修改步骤:
一、修改setting.py中的 DATABASES
DATABASES = { 'default': { }, 'mysql': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'zz', # 数据库名称 'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1 'PORT': 3306, # 端口 'USER': 'root', # 数据库用户名 'PASSWORD': 'root', # 数据库密码 }, 'postgress': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'PASSWORD': '', 'HOST': '127.0.0.1', 'PORT': '5432', }, }
2、还是在setting.py文件中配置应用对应的数据库
- # 配置数据库操作路由
- DATABASE_ROUTERS = ['application.database_router.DatabaseAppsRouter']
- DATABASE_APPS_MAPPING = {
- 'app1':'mysql',
- 'app2':'postgress',
- }
3、在setting.py同目录下新建 database_router.py文件
添加以下代码
- # -*- coding: utf-8 -*-
- from django.conf import settings
- DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING
- class DatabaseAppsRouter(object):
- """
- A router to control all database operations on models for different
- databases.
- In case an app is not set in settings.DATABASE_APPS_MAPPING, the router
- will fallback to the `default` database.
- Settings example:
- DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'}
- """
- def db_for_read(self, model, **hints):
- """"Point all read operations to the specific database."""
- if model._meta.app_label in DATABASE_MAPPING:
- return DATABASE_MAPPING[model._meta.app_label]
- return None
- def db_for_write(self, model, **hints):
- """Point all write operations to the specific database."""
- if model._meta.app_label in DATABASE_MAPPING:
- return DATABASE_MAPPING[model._meta.app_label]
- return None
- def allow_relation(self, obj1, obj2, **hints):
- """Allow any relation between apps that use the same database."""
- db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label)
- db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label)
- if db_obj1 and db_obj2:
- if db_obj1 == db_obj2:
- return True
- else:
- return False
- return None
- def allow_syncdb(self, db, model):
- """Make sure that apps only appear in the related database."""
- if db in DATABASE_MAPPING.values():
- return DATABASE_MAPPING.get(model._meta.app_label) == db
- elif model._meta.app_label in DATABASE_MAPPING:
- return False
- return None
- def allow_migrate(self, db, app_label, model=None, **hints):
- """
- Make sure the auth app only appears in the 'auth_db'
- database.
- """
- if db in DATABASE_MAPPING.values():
- return DATABASE_MAPPING.get(app_label) == db
- elif app_label in DATABASE_MAPPING:
- return False
- return None
ok!然后就可以创建模型,在对应的app中操作数据库了。
.