[PYTHON] Wai "Kann Django mitmachen?"

(Hinweis) Dieser Artikel ist in Wai-Notation. In Bezug auf Herrn Yametaro @ Yametaro.

Eines Tages mein Zuhause

Wai "Ich mache eine Django-App als Hobby Nyaga" Wai "Sie können eine Tabelle erstellen, indem Sie einfach ein Modell schreiben." Wai "Django ist hungrig nach einem Management-Bildschirm!"

DB normalisiert

Wai "Einfache externe Tasten einstellen" Wai "Zum Beispiel ist es besser, die Tabelle für Spielerdaten und Spielerergebnisse zu trennen [^ 1]." [^ 1]: Es sieht so aus, als ob du es nicht brauchst, wenn du nur hier schaust, aber ich benutze es woanders ...

Players

id year name position
1 2019 Tanaka Krug
2 2019 Suzuki Erster Baseman
3 2020 Takahashi Außenfeldspieler
4 2020 Yamada zweiter Baseman

FielderTotalResults

id player_id at_bat hit homerun Abkürzung
1 1 4 1 1 ・ ・ ・
2 2 3 3 0 ・ ・ ・
3 3 5 2 1 ・ ・ ・
4 4 4 1 0 ・ ・ ・

Wai "Die player_id von Fielder Total Results ist ein externer Schlüssel" Wai "Es entspricht der" ID "des Spielertisches."

Wai "In diesem Beispiel ist FieldeTotalResults ID 1 Tanaka und 2 Datensätze sind Suzukis Noten." Wai "Es ist klar, dass 3 Takahashi und 4 Yamada ist."

Ich möchte INNER BEITRETEN

Wai "Die Fielder Total Results-Tabelle ist das Ergebnis der Summe der Ergebnisse für jeden Spieler." Wai "Ich möchte das Ergebnis mit Spielern kombinieren und auf dem Bildschirm anzeigen."

year name position at_bat hit homerun Abkürzung
2019 Tanaka Krug 4 1 1 ・ ・ ・
2019 Suzuki Erster Baseman 3 3 0 ・ ・ ・
2020 Takahashi Außenfeldspieler 5 2 1 ・ ・ ・
2020 Yamada zweiter Baseman 4 1 0 ・ ・ ・

Wai "So sieht es auf dem Bild aus" Wai "Ist es nicht möglich zu schreiben, dass die" ID "der Spieler und die" Spieler-ID "der Fielder-Gesamtergebnisse übereinstimmen?" Wai "Zum Beispiel, wenn Sie Suzukis Spielerinformationen und Noten kombinieren möchten."

from django.db import models
from eikan.models import Players, FielderTotalResults

p = Players.objects.get(pk=2)
f = FielderTotalResults.objects.get(player_id=p.id)

Wai "Hmm? Dies ist nur der gleiche Spielerrekord an jedem Tisch!" Wai "Ich möchte es kombinieren und als eine Daten an die Vorlage übergeben." Wai "Hmm, selbst wenn Sie sich das offizielle Dokument ansehen, gibt es keine Beschreibung von JOIN." Wai "In einem solchen Fall bekommen Sie es separat und machen etwas mit Vorlage?"

Eigentlich ist es schon INNER JOIN

Tochter (** 2 Jahre alt **) [^ 2] "Papa! Wenn du einen Kindertisch mit Django bekommst" [^ 2]: Es existiert wirklich Tochter "Ich habe es bereits erworben, als ich INNER mit dem Elterntisch verbunden war."

Wai "Was !?" Wai "(Im Alter von zwei Jahren verstehe ich Django bereits besser als Wai ...!?)"

Wai "Tochter, woher wusstest du das?" Tochter "Ich erinnere mich, wie ich mit meinen Freunden im Kindergarten gespielt habe"

Wai "(Kann der Kindergarten in Django gespielt werden ...?)" Wai "(Ich wusste es nicht, weil Wai in den Kindergarten ging ...)"

Wai "Aber meine Tochter, bist du wirklich mit dem Elterntisch verbunden?" Wai "Wenn du" f.name "schreibst" Wai "Tu das nicht, du wirst wütend."

Tochter "Wenn Sie ein Vater sind, sind Sie eine manuelle Person" Tochter "In einem solchen Fall bekommen Sie zuerst die Aufzeichnung des Kindertisches, oder?"

f = FielderTotalResults.objects.get(player_id=2)

Tochter "In diesem Zustand können Sie den Wert abrufen, wenn Sie" untergeordnete Tabelle. Externer Schlüssel. Spaltenname der übergeordneten Tabelle "schreiben.

f.player_id.name
>>>Suzuki

Wai "Ehrlich! (Manueller Mensch ...?)"

Tochter "Wenn Sie auf die gleiche Weise mit Vorlage schreiben" Tochter "Sie können die Spaltenwerte der übergeordneten Tabelle verwenden, ohne die übergeordnete Tabelle übergeben zu müssen." Tochter "Wenn Eltern-> Kinder-> Enkelkinder eine Beziehung haben" Tochter " Enkel Tabelle. Kind externen Schlüssel. Eltern externen Schlüssel. Eltern Element " Tochter "Ich kann schreiben"

Wai "Wow ... es ist unglaublich ..." Wai "Ich kann nirgendwo mitmachen, aber Django kann einfach mitmachen."

Tochter "Papa wird von niemandem referenziert" Wai "Se, Sayana ..." Wai "(Was für ein zerstörerisches 2-jähriges Kind ...)"

** Unten nach Kommentaren hinzugefügt **

Ein anderer Tag

Wai "Endlich fertig!" Wai "Ich wurde verschont, während ich schlief, also konnte ich nur 8 Stunden schlafen!"

Yome (ich schlafe genug, oder?)

Wai "Ich werde es Heroku mit einer Probe geben" Wai "Nun, Inhalt ist Inhalt Ich benutze es nur für Wai!"

Tochter "Ich habe es geschafft" Tochter "Ich denke, das ist eine große Sache" Tochter "Das ist Bildung"

Wai "Fett !?" Wai (Unter Druck wie der ehemalige Direktor des Kansai-Baseballteams ...!) Wai "Tochter, denkst du, dass der Wert für das Stehlen in der heutigen Zeit nicht so hoch ist?"

Tochter "Papa, rede über Django, nicht über Sabermetrics." Tochter "Egal wie viel Sie im Zustand von INNER JOIN bekommen können" Tochter "Jedes Mal, wenn ich versuche, den Wert im aktuellen Schreibstil zu verwenden" Tochter "Viele Anfragen werden gestellt und es wird sehr schwer" Tochter "Sogenanntes N + 1 Problem" Tochter "Tatsächlich stellt derjenige, den Dad für Heroku eingesetzt hat, auch viele Fragen."

Wai "Ich dachte, es wäre schwer, aber ich frage mich, ob es so ist ..." Wai "Woher wusstest du, dass meine Tochter viele Fragen hat?"

Tochter "Wenn ich die Django-Debug-Symbolleiste verwende, wird die ausgegebene Abfrage angezeigt." Tochter "Wenn Sie googeln, können Sie leicht verstehen, wie man es benutzt, also werde ich es weglassen." Tochter "Die Abfrage von Dads App sieht so aus"

Seitenname Anzahl der Abfragen Verarbeitungszeit(ms)
Aktuelles Team 48 959
Teamliste 7 115
Teamdetails 324 4576
Liste der Feldspieler 43 770
Liste der Krüge 15 416
Krug Details 76 1426
Batter Details 66 1261
Übereinstimmungsliste 29 453
Spieldetails 20 345

Wai "Weil Teamdetails aus verschiedenen Tabellen stammen." Wai "Es ist wirklich schwer" Wai "Wenn das leichter wird, tut es mir leid."

Tochter "Wenn Sie Aufzeichnungen erhalten und verarbeiten möchten, die an verschiedenen Orten verwandt sind" Tochter "wie es ein Kommentar war" Tochter "Mit select_related () können Sie die Ausgabe nutzloser Abfragen beenden."

f = FielderTotalResults.objects.select_related('player_id').get(player_id=2)
f.player_id.name
>>>Suzuki

Tochter "Es ist so als eine Art zu schreiben" Tochter "Auf diese Weise, egal wie oft Sie" f.player_id.name "verwenden." Tochter "Die Abfrage wird nur einmal ausgegeben"

Wai "Wow ... es ist unglaublich ..." Wai "Dann werde ich alles reparieren, was vorerst gilt."

n Wochen später

Wai "Es wird leichter!" Wai "Es ist sehr effektiv, nur select_related () zu verwenden." Wai "Überprüfen Sie mit django-debug-toolbar" Wai "Einfache Überprüfung der Gesamtverarbeitung" Wai "Dies ist das Ergebnis einer umfassenden Überholung."

Seitenname Anzahl der Abfragen(Bisherige) Anzahl der Abfragen(Rückseite) Verarbeitungszeit(Bisherige)(ms) Verarbeitungszeit(Rückseite)(ms)
Aktuelles Team 48 7 959 183
Teamliste 7 3 115 75
Teamdetails 324 15 4576 110
Liste der Feldspieler 43 3 770 92
Batter Details 66 6 1261 212
Liste der Krüge 15 3 416 71
Krug Details 76 12 1426 137
Übereinstimmungsliste 29 3 453 1
Spieldetails 20 6 345 2

Wai "Ich habe es behoben, damit ich nicht so viele Anfragen wie möglich stelle." Wai "Egal wo Sie es anzeigen, es ist knusprig!" Wai "Es ist offensichtlich, wenn man es vergleicht!" Wai "Und selbst wenn Sie weitere Daten hinzufügen" Wai "Die Anzahl der Anfragen hat nicht viel zugenommen." Wai "Wenn Sie neugierig sind, berühren Sie es bitte und vergleichen Sie es ~"

Schwer: https://trial-endb-v1.herokuapp.com/ Feuerzeug: https://trial-endb-v2.herokuapp.com/

Im Bad

Wai "Wai selbst war von dieser Funktion beeindruckt, deshalb habe ich diesen Artikel geschrieben." Wai "Wenn Sie diesen Teratail-Beitrag finden, können Sie diesen Artikel lange lesen." Wai "Ich habe darüber gesprochen, es bald zu lösen." Wai "Dieser Artikel kann für viele Menschen laut sein."

Tochter "Papa" Tochter "Glauben Sie, dass Artikel, die die Antwort von Teratail ergänzen, auch jemandem helfen werden?" Tochter "Und indem Sie so in Wai-Notation schreiben" Tochter "Durch Wiedererleben von Erfolg aus Misserfolg" Tochter "Es wird in jedermanns Erinnerung Wurzeln schlagen" Tochter "Eigentlich einen Kommentar bekommen und es versuchen" Tochter "Hast du es durch Vergleichen bekommen?"

Wai "Seyana" Wai "Wai selbst kann die Vorteile nicht spüren, selbst wenn er plötzlich die beste Praxis sagt:" Das ist besser! " Wai "Ich hoffe, jemand liest diesen Artikel und fühlt sich gut dabei." Tochter "Ummami!"

Wai "Kann ich Eis essen, wenn ich aus dem Bad komme?" Tochter "Wow essen!"

Wai "(Ich habe bis zu diesem Zeitpunkt getauscht)" Wai "(Erzähl mir von dem Kind, das das trägt)"

** ~ ~ (Keine Pointe oder Berg) Ende ~ ~ **

Github https://github.com/shimayu22/Eikan-Database

Referenz

Tabellenverknüpfungen, die selbst SQL-Amateure verstehen können (innere Verknüpfung und äußere Verknüpfung) Zusammenfassung der Django-Datenbankoperationen Als ich die von Django generierte Abfrage überprüfte, wurde sie in großer Anzahl ausgegeben [Django] Einfallsreichtum zur Reduzierung der Anzahl der Abfragen (wird jederzeit hinzugefügt) Django Reverse Pull Cheet Sheet (Abfragesatz) [Django 2.2] Wie zeigen Sie das Beziehungsziel in Django an? [Listenansicht] Enkelkinder-Tabelle mit Django durchsuchen So finden und beseitigen Sie N + 1-Probleme während der Entwicklung auf Django

Recommended Posts

Wai "Kann Django mitmachen?"
Was macht Djangos Rendering?
Mach Django mit CodeStar (Python3.6.8, Django2.2.9)
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Führen Sie eine AES-Verschlüsselung mit DJango durch
Linke äußere Verbindung im Django-Modell
Python | Was Sie mit Python machen können