Maison  >  Article  >  développement back-end  >  Comment faire fonctionner plusieurs bases de données avec Django en python (code)

Comment faire fonctionner plusieurs bases de données avec Django en python (code)

不言
不言original
2018-09-17 16:45:441418parcourir

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.py

Importez 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn