【发布时间】:2020-12-08 12:12:44
【问题描述】:
我是 Django 新手,非常感谢您的帮助。请让我知道我犯了什么错误。谁能给我一个至少有 2 个应用程序和 2 个数据库的例子。
我的 Django 项目中有 3 个应用程序樱桃、苹果和芒果。每个应用程序都有“models_cherry.py、models_apple.py 和 models_mango.py”。我在 MySQL 工作台 DB1、DB2 和 DB3 中创建了 3 个数据库。
当我在 Windows PowerShell 上触发以下查询以进行迁移时,它应该在数据库中创建表。迁移应该在数据库上完成。
- python manage.py makemigrations 2) python manage.py migrate
以上命令只为一个数据库的一个模型创建表。
我的问题是,我想为所有相应数据库的所有模型创建表。 即,对于文件 models_cherry.py 中的类到数据库 DB1,对于文件 models_apple.py 中的类到 DB2 和对于 models_mango.py 中的类到 DB3?
下面是 settings.py 和 routers 文件的代码:
#Settings.py
DATABASE_ROUTERS =['apple.Routers.core_router.core_router', #Path to router file
'mango.Routers.man_router.man_router']
DATABASE_APPS_MAPPING = {'core':'core',
'man':'man'}
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'PORT': '3306',
'NAME': 'DB1',
'USER': 'root',
'PASSWORD': 'root',
'OPTIONS': {
'autocommit': True,
},
},
'core': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'PORT': '3306',
'NAME': ' DB2',
'USER': 'root',
'PASSWORD': 'root',
'OPTIONS': {
'autocommit': True,
},
},
'man': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'localhost',
'PORT': '3306',
'NAME': ' DB3',
'USER': 'root',
'PASSWORD': 'root',
'OPTIONS': {
'autocommit': True,
},
},
}
# man_router.py
class man_router:
route_app_labels = {'man'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'man'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'man'
return None
def allow_relation(self, obj1, obj2, **hints):
if (
obj1._meta.app_label in self.route_app_labels or
obj2._meta.app_label in self.route_app_labels
):
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.route_app_labels:
return db == 'man'
return None
# core_router.py
class core_router:
route_app_labels = {'core'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'core'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'core'
return None
def allow_relation(self, obj1, obj2, **hints):
if (
obj1._meta.app_label in self.route_app_labels or
obj2._meta.app_label in self.route_app_labels
):
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label in self.route_app_labels:
return db == 'core'
return None
【问题讨论】:
标签: python-3.x django django-models django-migrations