Der Inhalt dieses Artikels befasst sich mit der Methode (Code) von Django, die mehrere Datenbanken in Python betreibt. Ich hoffe, dass er für Sie hilfreich ist.
1. Datenbank-Routing-Verteilungsdatei hinzufügen
Erstellen Sie die Datei „database_router“ im Projektordner. Kopieren Sie den folgenden Code in diese Datei.
from django.conf import settings DATABASE_MAPPING = settings.DATABASE_APPS_MAPPING class DatabaseAppsRouter(object): """ A router to control all database operations on models for different databases. In case an app is not set in settings.DATABASE_APPS_MAPPING, the router will fallback to the `default` database. Settings example: DATABASE_APPS_MAPPING = {'app1': 'db1', 'app2': 'db2'} """ def db_for_read(self, model, **hints): """"Point all read operations to the specific database.""" if model._meta.app_label in DATABASE_MAPPING: return DATABASE_MAPPING[model._meta.app_label] return None def db_for_write(self, model, **hints): """Point all write operations to the specific database.""" if model._meta.app_label in DATABASE_MAPPING: return DATABASE_MAPPING[model._meta.app_label] return None def allow_relation(self, obj1, obj2, **hints): """Allow any relation between apps that use the same database.""" db_obj1 = DATABASE_MAPPING.get(obj1._meta.app_label) db_obj2 = DATABASE_MAPPING.get(obj2._meta.app_label) if db_obj1 and db_obj2: if db_obj1 == db_obj2: return True else: return False return None def allow_syncdb(self, db, model): """Make sure that apps only appear in the related database."" if db in DATABASE_MAPPING.values(): return DATABASE_MAPPING.get(model._meta.app_label) == db elif model._meta.app_label in DATABASE_MAPPING: return False return None def allow_migrate(self, db, app_label, model=None, **hints): """ Make sure the auth app only appears in the 'auth_db' database. """ if db in DATABASE_MAPPING.values(): return DATABASE_MAPPING.get(app_label) == db elif app_label in DATABASE_MAPPING: return False return None
2. Konfigurieren Sie mehrere Datenbanken in der Datei „settings.py“
# Database # https://docs.djangoproject.com/en/2.1/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_test', 'HOST': '127.0.0.1', 'USER': 'root', 'PASSWORD': '123456', 'PORT': '3306', }, #配置第二个数据库 'test': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'xsanjiaocheng', 'HOST': '127.0.0.1', 'USER': 'root', 'PASSWORD': '123456', 'PORT': '3306', } }
#Stellen Sie das Datenbankrouting ein und ändern Sie django_test in den Namen Ihres Projekts .
DATABASE_ROUTERS = ['django_test.database_router.DatabaseAppsRouter']
#Konfigurieren Sie die entsprechende Beziehung zwischen der Datenbank und der App
DATABASE_APPS_MAPPING = { # example: # 'app_name':'database_name', # 'app01': 'test', 'app01': 'default', 'app02': 'test', }
3. Erstellen Sie einfach die Datentabelle ganz normal in der Datei models.py in der entsprechenden App (versuchen Sie, beim Erstellen der Tabelle nicht denselben Tabellennamen zu verwenden)
models.py in app01:
class django_test_1(models.Model): abc = models.CharField(max_length=20) class Meta: app_label='app01' app02中的models.py: class test_1(models.Model): tests= models.CharField(max_length=20)
Migrationsdateien generieren
Dasselbe wie zuvor: python manage.py makemigrations
Datenbank migrieren
Bei der Migration müssen Sie den Datenbanknamen angeben
python manage.py migrate database=test
Wenn Sie die entsprechende models.py-Datei für die bereits erstellte Datenbank erstellen , müssen Sie keine Migrationsdatei generieren. Führen Sie einfach den Befehl „python manage.py inspectdb > app02/models.py --database=test“ aus.
6. Betriebsdatenbank
1) Datenbank manuell auswählen
django_test_1.objects.using('default').create(abc='hdajh')
2) Datenbank automatisch auswählen
Kein using() wie zuvor.
7. Konfigurieren Sie urls.py
Importieren Sie die Datei, die der Datei „views.py“ der App entspricht. Es ist besser, ihm einen Alias zu geben oder die Datei „views.py“ umzubenennen.
Andere Verwendung ist die gleiche wie zuvor.
Das obige ist der detaillierte Inhalt vonSo betreiben Sie mehrere Datenbanken mit Django in Python (Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!