慕容森
数据库相关东西的配置主要在 settings.py 文件中完成。因此,要将多个数据库添加到我们的 django 项目中,我们需要将它们添加到 DATABASES 字典中。这些设置进去 Settings.pyDATABASE_ROUTERS = ['path.to.DemoRouter']DATABASE_APPS_MAPPING = {'user_data': 'users_db', 'customer_data':'customers_db'}DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }, 'users_db': { 'NAME': 'user_data', 'ENGINE': 'django.db.backends.postgresql', 'USER': 'postgres_user', 'PASSWORD': 'password' }, 'customers_db': { 'NAME': 'customer_data', 'ENGINE': 'django.db.backends.mysql', 'USER': 'mysql_cust', 'PASSWORD': 'root' }}对于多个数据库,最好谈谈数据库路由器。默认路由方案确保如果未指定数据库,则所有查询都回退到默认数据库。数据库路由器默认为 []。把这个放进去 models.pyclass DemoRouter: """ A router to control all database operations on models in the user application. """ def db_for_read(self, model, **hints): """ Attempts to read user models go to users_db. """ if model._meta.app_label == 'user_data': return 'users_db' elif model._meta.app_label == 'customer_data': return 'customer_db' return None def db_for_write(self, model, **hints): """ Attempts to write user models go to users_db. """ if model._meta.app_label == 'user_data': return 'users_db' elif model._meta.app_label == 'customer_data': return 'customer_db' return None def allow_relation(self, obj1, obj2, **hints): """ Allow relations if a model in the user app is involved. """ if obj1._meta.app_label == 'user_data' or \ obj2._meta.app_label == 'user_data': return True return None def allow_migrate(self, db, app_label, model_name=None, **hints): """ Make sure the auth app only appears in the 'users_db' database. """ if app_label == 'user_data': return db == 'users_db' return None相应的模型将被修改为class User(models.Model): username = models.Charfield(ax_length=100) . . . class Meta: app_label = 'user_data'class Customer(models.Model): name = models.TextField(max_length=100) . . . class Meta: app_label = 'customer_data'使用多个数据库时,很少有有用的命令。 $ ./manage.py migrate --database=users_db