Maison > Article > développement back-end > Comment faire fonctionner plusieurs bases de données avec Django en python (code)
Le contenu de cet article concerne la méthode (code) d'exploitation de plusieurs bases de données dans Django en python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
1. Ajoutez le fichier de distribution de routage de base de données
Créez le fichier 'database_router' dans le dossier du projet. Copiez le code suivant dans ce fichier.
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. Configurez plusieurs bases de données dans le fichier 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', } }
#Définissez le routage de la base de données et remplacez django_test par The nom de votre projet.
DATABASE_ROUTERS = ['django_test.database_router.DatabaseAppsRouter']
#Configurer la relation correspondante entre la base de données et l'application
DATABASE_APPS_MAPPING = { # example: # 'app_name':'database_name', # 'app01': 'test', 'app01': 'default', 'app02': 'test', }
3, créez simplement la table de données normalement dans le fichier models.py dans l'application correspondante (essayez de ne pas utiliser le même nom de table lors de la création de la table)
models.py dans 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)
4. Générer des fichiers de migration
Identique qu'avant : python manage.py makemigrations
5 . Base de données de migration
Vous devez spécifier le nom de la base de données lors de la migration
python manage.py migrate database=test
Si vous créez le models.py correspondant. pour la base de données déjà créée Il n'est pas nécessaire de générer un fichier de migration, exécutez simplement la commande "python manage.py inspectdb > app02/models.py --database=test".
6. Opération base de données
1) Sélectionnez manuellement la base de données
django_test_1.objects.using('default').create(abc='hdajh')
2) Sélectionnez automatiquement la base de données
🎜>Aucun using() n'est ajouté comme avant.
7. Configurez urls.pyImportez le fichier correspondant à vues.py de l'application. Il est préférable de lui donner un alias ou de renommer le fichier vues.py.
Les autres utilisations sont les mêmes qu'avant.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!