我是python和DJango的新手,所以,如果可以的话,请详细解释。 我想在DJango 3数据库中使用: 1)对于DJango身份验证,管理员等 2)对于本地网站商店 3)对于主数据库
首先,在我的旧项目(PHP)中,我使用了两个数据库:
*第一数据库(localdatabase): ->该数据库正在我的虚拟主机上运行,并且包含一些用于主数据库的变量
*第二个数据库(主数据库): ->包含很多表和行,而本地数据库则不在其中。
所以我想制作一个脚本来按以下顺序读取表: Auth> Localdatabase> Maindatabase
例如: * Localdatabase有此表: ->汽车品牌 ->汽车配件
我一直在尝试连接多个数据库,但我不明白,为什么只读取其中两个。 代码正在读取auth数据库和本地数据库。
我有此代码:
settings.py
DATABASES = {
'default': {},
'auth_db':
{
'NAME': 'gws2',
'ENGINE': 'django.db.backends.mysql',
'USER': 'root',
'PASSWORD': '',
},
'primary': {
'NAME': 'gws',
'ENGINE': 'django.db.backends.mysql',
'USER': 'root',
'PASSWORD': '',
},
'secondary':{
'NAME': 'gwsautqe_ocar890',
'ENGINE': 'django.db.backends.mysql',
'USER': 'root',
'PASSWORD': 'UkVP0qdlle9TKP2z',
'HOST': '46.231.42.12',
'PORT': '3306',
}
}
DATABASE_ROUTERS = ['gwsauto.routes.AuthRouter', 'gwsauto.routes.PrimaryReplicaRouter', 'gwsauto.routes.SecondaryReplicaRouter']
routes.py
class AuthRouter:
route_app_labels = {'auth', 'contenttypes'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'auth_db'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'auth_db'
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 == 'auth_db'
return None
class PrimaryReplicaRouter:
def db_for_read(self, model, **hints):
return 'primary'
def db_for_write(self, model, **hints):
return 'primary'
def allow_relation(self, obj1, obj2, **hints):
db_list = ('primary')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
return True
class SecondaryReplicaRouter:
def db_for_read(self, model, **hints):
return 'secondary'
def db_for_write(self, model, **hints):
return 'secondary'
def allow_relation(self, obj1, obj2, **hints):
db_list = ('secondary')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
return True
models.py
从django.db导入模型
class CarModels(models.Model):
description = models.CharField(max_length=100)
class Meta:
db_table = "models"
class CarAuto(models.Model):
BrandName = models.CharField(max_length=100)
class Meta:
db_table = "gws_brands"
在当前代码上:GWS_brands在本地数据库上,“模型”在主数据库上。 错误: Error
对不起,我的英语。预先感谢
答案 0 :(得分:0)
将maven {
url 'http://download.flutter.io'
}
放在CarModels
内,将app1/models.py
放在CarAuto
内
路由器
app2/models.py
现在先运行class AuthRouter:
route_app_labels = {'auth', 'contenttypes'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'auth_db'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'auth_db'
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 == 'auth_db'
return None
class PrimaryReplicaRouter:
route_app_labels = {'app1'}
def db_for_read(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'primary'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label in self.route_app_labels:
return 'primary'
return None
def allow_relation(self, obj1, obj2, **hints):
db_list = ('primary', 'secondary')
if obj1._state.db in db_list and obj2._state.db in db_list:
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 == 'primary'
return None
class SecondaryReplicaRouter:
route_app_labels = {'app2'}
def db_for_read(self, model, **hints):
return 'secondary'
def db_for_write(self, model, **hints):
return 'secondary'
def allow_relation(self, obj1, obj2, **hints):
db_list = ('secondary')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
return True
,然后运行python manage.py makemigrations