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了!

posted @ 2018-08-14 17:47  人生需要激情  阅读(355)  评论(0编辑  收藏  举报