Die Verwendung mehrerer Datenbanken in Django ist ein fortgeschrittener Ansatz und wird normalerweise in Anwendungen verwendet, die eine hohe Last und Datenmengen bewältigen. Django unterstützt mehrere Datenbankverbindungen durch das sogenannte Datenbank-Routing.
Bevor wir auf das manuelle Routing von Datenbankabfragen eingehen, müssen wir wissen, wie man mehrere Datenbanken in einer Django-Anwendung konfiguriert. In der `DATABASES` Konfiguration in Ihren Django `settings.py` muss jede Datenbank ihre eigene Konfiguration haben. (Verweis: Django Dokumentation – Verwendung mehrerer Datenbanken)
```python
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.postgresql’,
‘NAME’: ‘mydatabase’,
‘USER’: ‘mydatabaseuser’,
‘PASSWORD’: ‘mypassword’,
‘HOST’: ‘localhost’,
‘PORT’: ‘5432’,
},
‘extra’: {
‘ENGINE’: ‘django.db.backends.postgresql’,
‘NAME’: ‘extra_data’,
‘USER’: ‘extrauser’,
‘PASSWORD’: ‘extrapassword’,
‘HOST’: ‘localhost’,
‘PORT’: ‘5432’,
}
}
```
In diesem Beispiel haben wir zwei Datenbanken `default` und `extra` definiert.
Mit mehreren Datenbanken können Sie explizit angeben, welche Datenbank Django für eine QuerySet-Operation (create, retrieve, update, delete) verwenden soll. Sie tun dies, indem Sie die `using` Methode auf den QuerySet anwenden.(Verweis: Django Dokumentation – Datenbank-Routing)
```python
Für fine-grained Kontrolle über die ausgewählte Datenbank können Sie Database Routers verwenden. Datenbankrouter sind einfache Python-Klassen, die vier Methoden bereitstellen, um die Datenbankauswahl für verschiedene Zwecke zu steuern (Database Routing).
Nachdem Sie Ihre Datenbankrouter definiert haben, müssen Sie Django in Ihrer settings.py-Datei darüber informieren.(Verweis: Django Dokumentation – Verwendung mehrerer Datenbanken)
```python
DATABASE_ROUTERS = [‘path.to.your.DatabaseRouter’]
```
Django empfiehlt, nicht zu versuchen, “write-once” Szenarien zu erstellen, bei denen die gleiche Datenbank sowohl von Django als auch von externen Prozessen geschrieben wird, da dies zu Dateninkonsistenzen führen kann, die schwer zu diagnostizieren sind.
Beachten Sie auch, dass die Verwendung mehrerer Datenbanken Transaktionen komplizierter macht, da Sie plötzlich mit der Notwendigkeit konfrontiert sind, verteilte Transaktionen zu behandeln. Bemühen Sie sich, für jeden einzelnen Request nur eine Datenbank zu benutzen, wenn möglich (Verweis: Django Dokumentation – Verwendung mehrerer Datenbanken).