运行 manage.py makemigrations for multiple databases in django
Running manage.py makemigrations for multiple databases in django
我正在尝试在我的 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 迁移。它将保存在 MySQL.
但是当我在 models.py 文件中再添加一个 table 时:
# App/models.py
class Mongo(models.Model):
Name = models.CharField(max_length=50)
City = models.CharField(max_length=50)
我想在 MongoDB 中保存此 table。
如果我 运行 manage.py makemigrations 然后 运行 manage.py migrate --database=mongoproject,它将 'Mongo' Table 保存在 MongoDB由于之前的迁移,还保存 'ForSQL' table 到 MongoDB。
我需要帮助来设置路由器以区分每个 table 上的迁移。
我正在寻找此解决方案,但无法使它们正常工作。
这是我解决问题的方法
# 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)
然后简单地 运行 命令 manage.py makemigrations
和 manage.py migrate --database=default
默认数据库(在我的例子中 MySQL)和 manage.py migrate --database=mongoproject
命令 MongoDB。
它将在 MySQL
中保存 ForSQL
table 并在 MongoDB
中保存 Mongo
table。
这正是我所需要的。
希望对大家有所帮助。
这是帮助我的东西
我正在尝试在我的 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 迁移。它将保存在 MySQL.
但是当我在 models.py 文件中再添加一个 table 时:
# App/models.py
class Mongo(models.Model):
Name = models.CharField(max_length=50)
City = models.CharField(max_length=50)
我想在 MongoDB 中保存此 table。 如果我 运行 manage.py makemigrations 然后 运行 manage.py migrate --database=mongoproject,它将 'Mongo' Table 保存在 MongoDB由于之前的迁移,还保存 'ForSQL' table 到 MongoDB。
我需要帮助来设置路由器以区分每个 table 上的迁移。 我正在寻找此解决方案,但无法使它们正常工作。
这是我解决问题的方法
# 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)
然后简单地 运行 命令 manage.py makemigrations
和 manage.py migrate --database=default
默认数据库(在我的例子中 MySQL)和 manage.py migrate --database=mongoproject
命令 MongoDB。
它将在 MySQL
中保存 ForSQL
table 并在 MongoDB
中保存 Mongo
table。
这正是我所需要的。 希望对大家有所帮助。
这是帮助我的东西