Django ist mit Pythons Webframework vertraut. Laut "SimilarTech, das zeigt, wann und welche Tools auf welcher Site eingeführt wurden" scheint Django auf dem Vormarsch zu sein, obwohl sein Anteil in den meisten Ländern Ruby On Rails unterlegen ist.
Die Zielgruppe dieses Artikels sind übrigens diejenigen, die Django in gewissem Umfang verwendet haben und diejenigen, die das MTV- (oder MVC-) Modell in gewissem Maße verstehen. Wenn Sie es noch nicht berührt haben, beginnen Sie mit dem Tutorial auf der offiziellen Website.
Angenommen, Sie haben die folgenden drei Modelle (Dämonenkiller, Klasse und Atmung).
kimetsu_no_models.py
from django.db import models
class KisatsuMember(models.Model):
"""Dämonenschlachtmodell"""
id = models.UUIDField()
#Sex ex)竈 MON, meine Frau, Schmetterling
last_name = models.CharField(max_length=20)
#Name ex)Sumijiro, Zeni, Shinobu
first_name = models.CharField(max_length=20)
#Klasse
rank = models.ForeignKey(Rank, on_delete=models.PROTECT)
#Atem
breath = models.ForeignKey(Breath, on_delete=models.PROTECT, null=True)
#Aktives Flag
is_active = models.BooleanField(default=True)
class Meta:
db_table = 'kisatsu_member'
class Rank(models.Model):
"""Klassenmodell"""
id = models.UUIDField()
#Klassenname ex)Säule, 癸
name = models.CharField(max_length=10)
class Meta:
db_table = 'rank'
class Breath(models.Model):
"""Atemmodell"""
id = models.UUIDField()
#Atemname ex)Wasser, Donner, Tier
name = models.CharField(max_length=10)
#Anzahl der Typen z) 6, 10, 11
number_of_types = models.IntegerField()
class Meta:
db_table = 'breath'
Das Referenzieren der Werte in der Tabelle von Eltern zu Kind, z. B. vom Dämonenkiller bis zum Atmen, wird als "Vorwärtsreferenz" bezeichnet. Wenn Sie beispielsweise die Anzahl der Nachnamen, Vornamen und Arten von Dämonenschlachtern ermitteln möchten, die den Atem von "Wasser" der Reihe nach verwenden, ist dies wie folgt.
mizu_no_views.py
water_breath_member = KisatsuMember.objects \
.filter(breath__name="Wasser") \
.values("last_name",
"first_name",
"breath__number_of_types")
print(water_breath_user)
# <QuerySet [{'last_name': 'Tor', 'first_name': 'Sumijiro', 'breath__number_of_types': 10},
# {'last_name': 'Schuppenwasserfall', 'first_name': 'Sakonji', 'breath__number_of_types': 10},
# {'last_name': 'Tomioka', 'first_name': 'Yoshiyuki', 'breath__number_of_types': 11}]>
Abfrage veröffentlichen
mizu_no.sql
SELECT
kisatsu_member.last_name,
kisatsu_member.first_name,
breath.number_of_types
FROM
kisatsu_member
INNER JOIN
breath
ON kisatsu_member.breath_id = breath.id
WHERE
breath.name = 'Wasser'
;
Andererseits werden Verweise von Kindern auf Eltern und von Klassen auf Dämonenschlächter als "umgekehrte Verweise" bezeichnet. Versuchen wir nun eine etwas kompliziertere Erfassungsmethode. Wenn Sie einen anderen atmenden Namen als "Wasser" eines Dämonenschlachters erhalten möchten, dessen Rang "Säule" und "aktiv" ist, lautet dieser wie folgt. Die umgekehrte Referenz ist Miso, da sie die Tabellennamen ohne Unterstrich verbindet.
hashira_no_views.py
active_hashira_breathes = Rank.objects \
.filter(name="Säule",
kisatsumember__is_active=True) \
.exclude(kisastumember__breath__name="Wasser") \
.values("kisastumember__breath__name")
print(active_hashira_breathes)
# <QuerySet [{'kisastumember__breath__name': 'Flamme'},
# {'kisastumember__breath__name': 'Liebe'},
# {'kisastumember__breath__name': 'Dunst'}...]>
Abfrage veröffentlichen
hashira_no.sql
SELECT
breath.name
FROM
`rank`
INNER JOIN
kisatsu_member
ON kisatsu_member.rank_id = `rank`.id
INNER JOIN
breath
ON kisatsu_member.breath_id = breath.id
WHERE
`rank`.name = 'Säule'
AND kisatsu_member.is_active = 1
AND breath.name <> 'Wasser'
;
Ich kann nur in Python schreiben, aber ich werde mich weiterhin dem widmen!
Recommended Posts