Utilizzare più database in Django è realizzabile attraverso i suoi strumenti integrati che permettono di gestire le connessioni a diversi database.
Il primo passo è definire le configurazioni dei vari database all’interno del file settings.py. Si può fare in questo modo:
```
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.postgresql’,
‘NAME’: ‘mydatabase’,
‘USER’: ‘mydatabaseuser’,
‘PASSWORD’: ‘mypassword’,
‘HOST’: ‘localhost’,
‘PORT’: ‘5432’,
},
‘extra’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘myotherdatabase’,
‘USER’: ‘myotherdatabaseuser’,
‘PASSWORD’: ‘myotherpassword’,
‘HOST’: ‘localhost’,
‘PORT’: ‘3306’,
}
}
```
In questo esempio, ‘default’ e ‘extra’ sono i nomi delle configurazioni dei database.
Per eseguire delle query su un database specifico, si utilizza il metodo `using()` del QuerySet. Ad esempio:
```
User.objects.using(‘extra’).all()
```
Questa chiamata restituirà tutti gli oggetti User presenti nel database ‘extra’.
Django ci fornisce anche la possibilità di eseguire operazioni di database in modo automatico su diversi database utilizzando routers. I routers possono essere definiti per controllare le operazioni sui database, come per esempio: leggere e scrivere dati.
Ad esempio, ecco un router che distribuisce in modo automatico le operazioni di lettura e scrittura su diversi database:
```
class MyRouter:
def db_for_read(self, model, **hints):
return ‘extra’ if model._meta.app_label == ‘myapp’ else ‘default’
Qui, tutte le operazioni di lettura e scrittura per l’app ‘myapp’ verranno eseguite sul database ‘extra’, mentre tutte le altre operazioni su ‘default’.
Ricordate di aggiungere il vostro router al setting `DATABASE_ROUTERS` in settings.py:
```
DATABASE_ROUTERS = [‘myapp.database_routers.MyRouter’]
```
Queste informazioni sono prese dalla [documentazione ufficiale di Django](https://docs.djangoproject.com/en/3.1/topics/db/multi-db/).
In sostanza, Django offre una solida base per l’uso di più database, anche se utilizzarli può aggiungere una certa complessità. Vale la pena notare che sebbene l’esempio qui mostrato usa PostgreSQL e MySQL come database, Django supporta anche molti altri database come Oracle e SQLite.