Django学习笔记之不同应用连接不同数据库
一、在settings里面添加一下内容:
二、在和settings同一级目录下新建一个py文件,文件名可以随意取,我这里为database_router.py,代码如下:
from django.conf import settings database = settings.DATABASES_APPS_MAPPING # 加载到配置文件里面的对应关系的变量 class DatabaseAppRouter(object): def db_for_read(self, model, **hints): # 对数据库进行读操作时要指向的数据库 if model._meta.app_label in database: return database[model._meta.app_label] return None def db_for_wirte(self, model, **hints): # 对数据库进行写操作时要指向的数据库 if model._meta.app_label in database: return database[model._meta.app_label] return None def db_for_relation(self, obj1, obj2, **hints): # 确保创建的两个模型是指向的同一数据库,然后两个模型可以做关联 db_obj1 = database.get(obj1._meta.app_label) db_obj2 = database.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): # 允许同步数据到指定的数据库 if db in database.values(): return database.get(model._meta.app_label) == db elif model._meta.app_label in database: return False return None def allow_migrate(self, db, app_label, model=None, **hints): # 允许将模型转换为sql语句 if db in database.values(): return database.get(app_label) == db elif app_label in database: return False return None
三、在应用里面创建model时,需要指定数据库:
四、使用manage.py生成数据表的时候,需要加参数:
python manage.py makemigrations app01 #指定要生成数据表的app
python manage.py migrate --database=db01 #生成sql时指定对应的数据库名称(不是应用名)
五、在做增、删、改、查的时候,需要制定对应的数据库:
到此,就OK了!