2016-04-06 7 views
0

Ich habe eine Datenbank für viele strukturierte Daten. Ich werde eine Abfrage unter diesen Daten durchführen.Verwenden Sie benutzerdefinierte Abfrage-Ergebnis als Quelle für Django-Modell (MySQL-Datenbank)

Es wird sehr hilfreich sein, wenn ich die Abfrage mit einer Ansicht mache. Ich kann ein Modell mit derselben Struktur wie die Ansicht erstellen und es dann als "echtes" Modell verwenden.

Kann ich jedoch in Fällen, in denen ich keine Ansicht erstellen kann, das Django-Modell verwenden, um benutzerdefinierte Ergebnismengen abzufragen?

Zum Beispiel können wir in MySQL eine Abfrage schreiben, um das mittlere Ergebnis in einer Liste von Tupeln zu speichern. Und dann können wir die Abfrage in der Liste durchführen. Können wir das Modell von Django trotzdem mit dem Ergebnis der Tupelliste füttern, die durch eine Abfrage erzeugt wird?

Antwort

1

Zum Füttern Modell mit Raw SQL-Abfrage können Sie raw() Methode verwenden. Werfen Sie einen Blick auf dieses Beispiel (aus offiziellen Referenz):

class Person(models.Model): 
    first_name = models.CharField(...) 
    last_name = models.CharField(...) 
    birth_date = models.DateField(...) 

#... 

for p in Person.objects.raw('SELECT * FROM myapp_person'): 
    print(p) 

Read more here

+0

Ist es möglich, Situation, wenn die Tabelle Person nie in der Datenbank vorhanden, stattdessen Ich habe gerade die Modellklasse für die Suche? –

+0

Wie möchten Sie eine Tabelle abfragen, die jetzt nicht existiert? Sie müssen dafür ein 'select' vorbereiten, damit Sie ein Modell erstellen können. Ich denke nicht, dass es in Django möglich ist, das Abfrageergebnis zum Model-Klassenobjekt zu analysieren, aber mithilfe von Cursorn und direkten DB-Abfragen ist es möglich, dynamisch eine Klasse zu erstellen (durch Abrufen des Ergebnisses, Iterieren und Hinzufügen von Feldern zu einer leeren Klasse). –

+0

Ich habe gerade einen Schnelltest gemacht. Ich erkannte, dass es in Django nur funktioniert, wenn Sie die unbearbeitete Abfrage ausführen und Daten aus Tabellen mit unterschiedlichen Namen aus dem Modell auswählen. Danke für Ihre Hilfe! –

Verwandte Themen