2017-01-30 3 views
0

Also zum Beispiel, hier sind die Datenbanken, die in meiner settings.py Datei eingestellt sind.Django MySQL auf einer anderen Datenbank

DATABASES = { 
    'default': { 
     'NAME': 'app_data', 
     'ENGINE': 'django.db.backends.postgresql', 
     'USER': 'postgres_user', 
     'PASSWORD': 's3krit' 
    }, 
    'my_blog': { 
     'NAME': 'my_blog', 
     'ENGINE': 'django.db.backends.mysql', 
     'HOST': '192.168.1.40', 
     'USER': 'mysql_user', 
     'PASSWORD': 'priv4te' 
    } 
} 

Ich brauche einige Informationen von my_blog Datenbank zu erhalten. Ich habe keine Schreibberechtigungen für diese Datenbank, ich muss nur einfache select Abfragen durchführen. Wie schlagen Sie vor, dass ich es tue?

Antwort

0

Wenn Sie mehrere Datenbanken verwenden, müssen Sie die Datenbankroutingregeln für die Abfragen ändern, die Sie für dieselben vornehmen.

Sie können hier mehr lesen. https://docs.djangoproject.com/en/1.10/topics/db/multi-db/

class MyBlogRouter(object): 
    """ 
    A router to control all database operations on models in the 
    auth application. 
    """ 
    def db_for_read(self, model, **hints): 
     """ 
     Attempts to read blog models go to my_blog. 
     """ 
     if model._meta.app_label == 'my_blog': 
      return 'my_blog' 
     return None 

Und in Ihrem settings.py

DATABASE_ROUTERS = ['path.to.MyBlogRouter',] 
+0

und wie soll ich mein Modell zu schreiben, zum Beispiel? – Erika

+0

Das Modell und seine Felder sollten eine Schemastruktur enthalten, die aus der Datenbankstruktur entnommen wurde. Sobald du damit fertig bist. Sie müssen dafür eine falsche Migration erstellen. Damit werden richtige Inhaltstypen für Ihre Django App generiert. Dann sollte das obige tun. Teste es richtig. –

+0

Ja, ich habe es richtig funktionieren. – Erika

0

Bitte unten in Ihrer Implementierung Daten abgerufen werden.

from django.db import connections 

cursor = connections['my_blog'].cursor() 
cursor.execute('yourquery') 
data = cursor.fetchall() # fetches all rows 
data = cursor.fetchone() # fetches one row 
+0

Danke, das klappt auch. Ich versuche immer noch, den besten Weg zu finden. – Erika

+0

Dies wird hilfreich sein, wenn es um den Punkt geht, an dem ich komplizierte Join-Anfragen verwenden sollte, denke ich. – Erika

+0

Wenn Sie sagten, dass Sie keinen Schreibzugriff auf die Datenbank haben, bedeutet das, dass Sie keine Tabellen mit Django-Modellen in dieser Datenbank erstellen werden. Außerdem würde ich nicht empfehlen, einen Datenbankrouter zu schreiben, da Sie ihn nur für SELECT-Abfragen verwenden werden. Sie können eine globale Methode in Ihrem Django-Projekt schreiben, die eine Verbindung zur my_blog-Datenbank herstellt und die Abfragedaten zurückgibt. Haben Sie die Django-Modelle für die entsprechende Datenbanktabelle? Wenn ja, dann kannst du einen Router schreiben. – shashankqv

Verwandte Themen