Я новичок ie в python и DJango, так что, пожалуйста, объясните поподробнее. Я хочу использовать в DJango 3 базах данных: 1) для DJango auth, admin и т. Д. 2) для локального магазина веб-сайтов 3) для основной базы данных
Итак, во-первых, в моем старом проекте ( PHP) Я использовал две базы данных:
* База данных Frist (localdatabase): -> Эта база данных работала на моем веб-хосте и содержит некоторые переменные для основной базы данных
* Вторая база данных ( основная база данных): -> Содержит много таблиц и строк, внутри которых не работает локальная база данных.
Итак, я хочу создать сценарий, который читает таблицы в следующем порядке: Auth> Localdatabase> Maindatabase
Пример: * В локальной базе данных есть следующие таблицы: -> автобренды -> автозапчасти
- В основной базе данных есть эти таблицы: -> AllAutoBrands -> AllAutoParts.
Я был пытаюсь подключить несколько баз данных, но не понимаю, почему читаю только 2 из них. Код читает базу данных аутентификации и локальную базу данных.
У меня есть этот код:
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 import models
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 находится в локальной базе данных, а «models» - в основной базе данных. Ошибка: Ошибка
Извините за мой английский sh. Заранее спасибо