#django
Вопрос:
Я перепробовал несколько баз данных в django. Итак, я установил базы данных таким образом
# settings.py DATABASE_ROUTERS = [ 'stage1.routers.MultiDBRouter', ] DATABASE_APPS_MAPPING = { 'stage1': 'stage1', } DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', }, 'stage1': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'stage1', 'HOST': 'localhost', 'USER': 'root', 'PASSWORD': '######', 'PORT': 3306, 'CHARSET': 'utf8mb4', }, }
# stage1.routers.py class MultiDBRouter(object): def __init__(self): self.model_list = ['stage1'] def db_for_read(self, model, **hints): if model._meta.app_label in self.model_list: return model._meta.app_label return None def db_for_write(self, model, **hints): if model._meta.app_label == 'stage1': return 'stage1' return None def allow_relation(self, obj1, obj2, **hints): if (obj1._meta.app_label in self.model_list or obj2._meta.app_label in self.model_list): return True return None def allow_migrate(self, db, app_label, model_name=None, **hints): if app_label == 'stage1': return db == 'stage1' return None
# stage1.models.py from django.db import models class Room(models.Model): name = models.CharField(max_length=100) sort = models.CharField(max_length=100) class Meta: app_label = "stage1"
Я сделал manage.py migrate --database=stage1
это, и это сработало. Но есть что-то неправильное, чего я не хотел.
Я просто хотел stage1
, чтобы в базе данных была только одна таблица room
. Но в нем есть все таблицы, которые в основном заданы так auth_group
: django_session
…
Как я могу сделать room
так, чтобы в stage1
базе данных была только одна таблица?
Пожалуйста, помогите мне.
Комментарии:
1. Вы пробовали запустить конкретную миграцию? Вот так ./manage.py перенесите myapp 0005_migration_to_run
2. Запустите свой
manage.py migrate --database=stage1
, но измените файл миграции. Комментируя миграции внутри, вы можете указать, что вы хотите выполнить, но убедитесь, что у вас не возникнет проблем с зависимостями.