Manipulation von Rohabfragen in Django

Salman Mehmood 15 Februar 2024
Manipulation von Rohabfragen in Django

Mit dieser Erklärung lernen wir, was die Methode raw() tut und wie wir rohe Abfragen manipulieren können, und wir werden auch lernen, wie wir SQL in unsere Anwendungen in Django einfügen.

Manipulieren Sie Raw-Abfragen mit Hilfe der raw()-Methode in Django

Die Verwendung der raw()-Methode in Django ermöglicht es uns, SQL-Abfragen zu nehmen oder zu erstellen und sie auszuführen. Dies ist jedoch nicht die einzige Möglichkeit, SQL-Abfragen in Django auszuführen. Anstatt das standardmäßige Formular-Setup zu verwenden, können wir auch, wenn wir möchten, das Formular umgehen und einfach SQL-Abfragen ausführen.

Aber warum haben wir das erwähnt? Denn die Methode raw() des Modellmanagers sollte generell Ihre erste Option sein, wenn Sie rohe SQL-Abfragen ausführen möchten.

Das liegt daran, dass die Struktur der unformatierten Abfragesatz-Klasseninstanz dem sehr ähnlich ist, was Sie mit der Abfragesatz-Klasseninstanz gearbeitet haben. Wir können andere Aktionen in den Rohabfragen ausführen, z. B. Indizieren und Slicing.

Beginnen wir also mit einem wirklich einfachen Beispiel. Lassen Sie uns fortfahren und die neue Funktion namens STUDENT_DATA() erstellen.

Wir werden den einfachen Datensatz und das Student-Modell in unserer models.py-Datei verwenden.

class Student(models.Model):

    FIRST_NAME = models.CharField(max_length=100)
    SR_NAME = models.CharField(max_length=100)
    age = models.IntegerField()
    CLASS_ROOM = models.IntegerField()
    TEACHER = models.CharField(max_length=100)

    def __str__(self):
        return self.FIRST_NAME

Jetzt gehen wir zurück zur Datei views.py und erstellen eine Funktion namens STUDENT_DATA(), um das Roh-SQL zu demonstrieren.

Innerhalb der Funktion nehmen wir alle Daten aus der Student-Tabelle mit Student.objects.all(). Dadurch werden alle Schülerdaten aus dieser Tabelle zurückgegeben und in SD_DATA gespeichert.

Lassen Sie uns dieses Objekt drucken. Wir werden auch connection.queries verwenden, die die Ausgabe von SQL und einige Leistungsmessungen liefern.

def STUDENT_DATA(request):

    SD_DATA = Student.objects.all()

    print(SD_DATA)
    print(connection.queries)
    return render(request, "output.html", {"data": SD_DATA})

Lassen Sie uns fortfahren und den Server ausführen. Der Browser zeigt alle Daten an, und dann können wir unten sehen, dass wir die von uns ausgeführte SQL-Abfrage erhalten haben.

Django Raw SQL-Ausgabe 1

Lassen Sie uns fortfahren und ein Äquivalent mit der Methode raw() erstellen. Also werden wir wieder student und seine Objekte verwenden, aber dieses Mal werden wir raw() verwenden.

Wir müssen die SQL-Abfrage innerhalb dieser Methode ausführen: SELECT * FROM student_student.

Wir müssen nicht alle diese einzelnen Elemente auswählen, also können wir mit dem Stern alle Tabellenfelder auswählen, und dann ist der nächste Satz FROM, der hilft, die Tabelle zu finden. Dann definieren wir den Tabellennamen student_student.

SD_DATA = Student.objects.raw("SELECT * FROM student_student")

Lassen Sie uns zurück in den Browser gehen und ihn aktualisieren. Dann werden wir sehen, dass wir diese Elemente mit einer Select-Anweisung aus der Datenbank zurückgeben.

Django Raw SQL-Ausgabe 2

Jetzt gehen wir weiter und erweitern dies etwas und wählen ein einzelnes Element aus. Dazu müssen wir die WHERE-Klausel verwenden; nach einem Leerzeichen wählen wir das Attribut age und übergeben es als Wert 21.

SD_DATA = Student.objects.raw("SELECT * FROM student_student WHERE age=21")

Lassen Sie uns den Django-Server erneut ausführen und den Browser aktualisieren. Dann sehen wir, dass das SQL funktioniert und ein einzelnes Element aus der Datenbank zurückgibt.

Django Raw SQL-Ausgabe 3

Wir haben gesehen, wie wir unser SQL in die raw()-Funktion von Django einfügen und wie wir Aktionen auf der Datenbank ausführen können.

Wenn Sie in der Django-Dokumentation die sofortige Referenz zum Modell durchsehen und durchlesen, erhalten Sie einige Informationen zu einem zurückgestellten Modell. Der Begriff verzögerte Modellinstanzen bezeichnet die Felder, die von der Abfrage ausgegeben werden, bis wir sie bei Bedarf laden.

Um die Daten zu drucken, müssen wir angeben, welche Daten wir in der Ausgabe sehen möchten, also müssen wir eine for-Schleife verwenden.

for d in Student.objects.raw("SELECT * FROM student_student"):
    print(d)

Wenn wir dies erneut ausführen, schauen Sie in die Konsole, da wir dies ausdrucken und die drei Namen aus der Tabelle zurückgeben.

Django Raw SQL-Ausgabe 4

Komplexere Abfragen finden Sie hier. Zum Beispiel bedeutet ein Konzept namens Erstellen eines Abfragesatzes, dass wir die Anzahl der zurückzugebenden Objekte begrenzen können.

Jetzt deklarieren wir eine neue Variable namens sql, speichern dann die SQL-Abfrage darin und übergeben sie an die Funktion raw(). Nach der Funktion raw() begrenzen wir zwei Zeilen, indem wir die Objekte in Scheiben schneiden.

sql = "SELECT * FROM student_student"
SD_DATA = Student.objects.raw(sql)[:2]

Wenn wir uns die Ausgabe ansehen, werden nur die beiden Zeilen zurückgegeben.

Django Raw SQL-Ausgabe 5

Vollständiger Quellcode der views.py-Datei:

from django.shortcuts import render
from .models import Student
from django.db import connection


def STUDENT_DATA(request):

    SD_DATA = Student.objects.all()
    sql = "SELECT * FROM student_student"
    SD_DATA = Student.objects.raw(sql)[:2]
    # for d in Student.objects.raw('SELECT * FROM student_student'):
    #     print(d)

    print(SD_DATA)
    # print(connection.queries)
    return render(request, "output.html", {"data": SD_DATA})

Wir haben den folgenden Code in unserer Vorlage verwendet.

{{data}}

<hr/>

{% for i in data %}
    <div>{{ i.FIRST_NAME }} - {{ i.age }}</div>
{% endfor %}
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Verwandter Artikel - Django SQL