Heim > Backend-Entwicklung > Python-Tutorial > So betreiben Sie mehrere Datenbanken mit Django in Python (Code)

So betreiben Sie mehrere Datenbanken mit Django in Python (Code)

不言
Freigeben: 2018-09-17 16:45:44
Original
1471 Leute haben es durchsucht

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
Nach dem Login kopieren

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',

    }

}
Nach dem Login kopieren

#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',
}
Nach dem Login kopieren

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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')
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage