Django models 在django中为多个数据库运行manage.py makemigrations

Django models 在django中为多个数据库运行manage.py makemigrations,django-models,multiple-databases,makemigrations,Django Models,Multiple Databases,Makemigrations,我试图在Django项目中使用多个数据库,即MongoDB和MySQL # settings.py DATABASES = { 'default': { 'NAME': 'sql_db', 'ENGINE': 'django.db.backends.mysql', 'USER': 'root', 'PASSWORD': 'root' }, 'mongoproject': { 'ENGINE' : '

我试图在Django项目中使用多个数据库,即MongoDB和MySQL

# settings.py
DATABASES = {
    'default': {
        'NAME': 'sql_db',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'root',
        'PASSWORD': 'root'
    },
   'mongoproject': {
      'ENGINE' : 'djongo',
      'NAME': 'mongo_db'
   }
}
我为eg制作模型

# App/models.py
class ForSQL(models.Model):
    Name = models.CharField(max_length=50)
    City = models.CharField(max_length=50)
我想把它保存在MySQL中。 为此,我将运行manage.py makemigrations,然后运行manage.py migrate。它将保存在MySQL中

但当我在models.py文件中再添加一个表时,如下所示:

# App/models.py
class Mongo(models.Model):
    Name = models.CharField(max_length=50)
    City = models.CharField(max_length=50)
我想在MongoDB中保存这个表。 如果我运行manage.py makemigrations,然后运行manage.py migrate--database=mongoproject,它会在MongoDB中保存“Mongo”表,并且由于以前的迁移,还会在MongoDB中保存“ForSQL”表

我需要帮助设置路由器以区分每个表上的迁移。
我寻找这个解决方案,但无法让它们工作。

以下是我解决问题的方法

# routers.py
import App.models
allmodels = dict([(name.lower(), cls) for name, cls in App.models.__dict__.items() if isinstance(cls, type)])

def allow_migrate(self, db, app_label, model_name = None, **hints):
    """ migrate to appropriate database per model """
    try:
        model = allmodels.get(model_name)
        return(model.params.db == db)
    except:
        pass

# App/models.py
class ForSQL(models.Model):
    class params:
        db = 'default'
    Name = models.CharField(max_length=50)
    City = models.CharField(max_length=50)

class Mongo(models.Model):
    class params:
        db = 'mongoproject'
    Name = models.CharField(max_length=50)
    City = models.CharField(max_length=50)
然后只需对默认数据库(在我的例子中是MySQL)运行命令
manage.py makemigrations
manage.py migrate--database=mongoproject
。 它将在
MySQL
中保存
ForSQL
表,在
MongoDB
中保存
Mongo

这正是我所需要的。 希望它能帮助别人


这就是帮助我解决问题的方法

# routers.py
import App.models
allmodels = dict([(name.lower(), cls) for name, cls in App.models.__dict__.items() if isinstance(cls, type)])

def allow_migrate(self, db, app_label, model_name = None, **hints):
    """ migrate to appropriate database per model """
    try:
        model = allmodels.get(model_name)
        return(model.params.db == db)
    except:
        pass

# App/models.py
class ForSQL(models.Model):
    class params:
        db = 'default'
    Name = models.CharField(max_length=50)
    City = models.CharField(max_length=50)

class Mongo(models.Model):
    class params:
        db = 'mongoproject'
    Name = models.CharField(max_length=50)
    City = models.CharField(max_length=50)
然后只需对默认数据库(在我的例子中是MySQL)运行命令
manage.py makemigrations
manage.py migrate--database=mongoproject
。 它将在
MySQL
中保存
ForSQL
表,在
MongoDB
中保存
Mongo

这正是我所需要的。 希望它能帮助别人


这就是帮助我制作数据库路由器的原因:我只使用一个应用程序,希望在不同的数据库中分离表。但每个时间表都是在每个数据库中创建的。我已经阅读了文档,我认为allow_migrate()可以工作。但无法正确编写。您可以制作一个数据库路由器:我只使用一个应用程序,希望在不同的数据库中分离表。但每个时间表都是在每个数据库中创建的。我已经阅读了文档,我认为allow_migrate()可以工作。但是写不好。