In dem Django-Artikel für Anfänger, den ich vor langer Zeit geschrieben habe, war derjenige, auf den relativ viel mehr zugegriffen wurde als auf andere, die Übernahme durch die DB in Django, obwohl er nicht so gut war.
Dieses Mal werde ich schreiben, wie man eine Abfrage für Anfänger erhält, die lernen
Fortsetzung: Beziehung [Anfänger] # 2 Django Query Database Acquisition 1-zu-viele und viele-zu-viele
Letzter Artikel: Aus Datenbank holen und rendern [Python Django] Webanwendung für Anfänger # 5 [Umgang mit Datenbankwerten]
Es ist mühsam, es auf der Seite anzuzeigen, um es einzeln zu überprüfen. Verwenden wir also die Shell.
Das diesmal verwendete Modell sieht so aus Der App-Name lautet Konten.
accounts/models.py
class Customer(models.Model):
name = models.CharField(max_length=100)
phone = models.CharField(max_length=20)
email = models.CharField(max_length=255)
age = models.integerField()
created_at = models.DateTimeField(auto_now_add=True)
Wenn Sie studieren, machen Sie es bitte wie folgt und versuchen Sie es.
$ django-admin startproject test
$ cd test
$ python manage.py startapp accounts
Bearbeiten Sie settings.py
Fügen Sie die Anwendung Ihrem Projekt hinzu.
myproject\settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accounts', #hinzufügen
]
Schreiben Sie den Code für models.py früher
$ python manage.py makemigrations
$ python manage.py migrate
Weiter, wenn bereits Daten vorhanden sind
Wenn keine Daten vorhanden sind
$ python manage.py createsuperuser
Erstellen Sie nach dem Erstellen des Verwaltungsbildschirms mit Benutzerinformationen, indem Sie den Superuser einfügen. Es wird nur angezeigt, wenn Sie es in admin.py registrieren.
test/accounts/admin.py
from django.contrib import admin
from .models import Customer
admin.site.register(Customer)
Greifen Sie auf "http: //127.0.0.1: 8000 / admin" zu und melden Sie sich an.
Sie können es mit "KUNDEN HINZUFÜGEN" hinzufügen.
$ python manage.py shell
Bitte importieren Sie es, da es nur verwendet werden kann, wenn das Modell geladen ist.
>>> from accounts.models import *
>>> customer = Customer.objects.all()
>>> customer
<QuerySet [<Customer: Sato>, <Customer: Tanaka>]>
Sie können es so bekommen.
Modellname.objects.all() #Holen Sie sich alle Daten
Modellname.objects.get(id=2) # id =Datenerfassung von 2
Modellname.objects.get(name='Sato') # name = 'Sato'Datenerfassung
Modellname.objects.first() #Holen Sie sich die ersten Daten in der Tabelle
Modellname.objects.last() #Holen Sie sich die zuletzt registrierten Daten in die Tabelle
Modellname.objects.filter(name='Sato') #Bedingungsspezifikation
Modellname.objects.filter(name__startwith='T') #Holen Sie sich Leute, deren Name mit T beginnt
Modellname.objects.filter(name='Sato', age__gte=20) #Herr Sato über 20 Jahre alt
Wenn Daten nicht mit get () erfasst werden können, wird der Fehler "DoesNotExist" zurückgegeben. Wenn zwei oder mehr Bedingungen erfüllt sind, tritt ein Fehler auf. Wenn die Daten nicht durch Filter abgerufen werden können, wird ein leerer Abfragesatz zurückgegeben. Sie sollten get verwenden, wenn die Verarbeitung merkwürdig wird, wenn Sie keine zuverlässigen Daten erhalten können.
Sie kann auch vom Primärschlüssel unabhängig vom Namen angegeben werden, z. B. "accounts.objects.get (pk = 2)".
Schauen wir uns ein Beispiel an.
>>> customer_filter = Customer.objects.filter(id=1)
>>> customer_filter
<QuerySet [<Customer: Sato>]>
>>> customer_get = Customer.objects.get(id=1)
>>> customer_get
<Customer: Sato>
Ein QuerySet ist ein Array oder eine Sammlung von Datensätzen.
Wenn Sie es mit filter
erhalten, müssen Sie es mit for abrufen.
customer_filter.name
ist ein Fehler.
customer_get.name
wird ordnungsgemäß verarbeitet. Grob gesagt ist QuerySet eine Sammlung von Daten, die von get abgerufen werden können.
Wenn Sie also eins nach dem anderen mit for herausnehmen, können Sie auf die gleiche Weise damit umgehen.
>>> customer_filter = Customer.objects.filter(id=1)
>>> customer_filter.name
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'QuerySet' object has no attribute 'name'
>>> customer_filter = Customer.objects.filter(id=1)
>>> for c in customer_filter:
... c.name
...
'Sato'
startswit, endwith
Ich schrieb es wie filter (name__startwith = 'T')
,
Beginnt mit launchwit
~
endwith
endet mit ~
Es kann unter den folgenden Bedingungen erhalten werden.
Ich habe es als age__gte = 20
geschrieben, aber Sie können so etwas wie das Folgende verwenden.
Über 20 Jahre alt in der Altersspalte.
gt (greater than)Super
gte (greater than equal)das ist alles
lt (less than)Weniger als
lte (less than equal)Weniger als
Modellname.objects.all().order_by('id') #ID-Spalte in aufsteigender Reihenfolge sortiert
Modellname.objects.all().order_by('-id') #ID-Spalte in absteigender Reihenfolge sortiert
Modellname.objects.all().filter(name='Sato').reverse() #Erhalten von Herrn Sato. Abrufen von Queryset-Daten in umgekehrter Reihenfolge
Modellname.objects.all().filter(name='Sato').count() #Satos Anzahl zählt
Modellname.objects.values('email').distinct() #Entfernen Sie doppelte Daten in der E-Mail-Spalte
Modellname.objects.all()[:5] #Holen Sie sich 5(Limit 5)
Modellname.objects.all()[5:10] # 5~Holen Sie sich 10(OFFSET 5 LIMIT 5)
Es kann einfacher zu verarbeiten sein, wenn es als Wörterbuch bezogen werden kann, wenn es von der Datenbank bezogen wird.
Referenz: https://docs.djangoproject.com/ja/3.1/ref/models/querysets/#values
>>> Blog.objects.filter(name__startswith='Beatles').values()
<QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>
Wenn Sie es normal erhalten, ist es schwierig, es zu verarbeiten, da es diktär ist, selbst wenn Sie das QuerySet mit for drehen und herausnehmen. Wenn Sie jedoch wie oben beschrieben "value" hinzufügen, können Sie es so verwenden, als könnten Sie den Inhalt des Datensatzes mit diktär abrufen.
values_list
ähnelt Werten, gibt jedoch nur die Werte zurück.
Referenz: https://docs.djangoproject.com/ja/3.1/ref/models/querysets/#values-list
Wenn es ärgerlich ist, dass der Schlüssel angehängt ist, z. B. Analyse, Schreiben in CSV, Übergeben einer Liste bei Verwendung der Bibliothek.
>>> Entry.objects.values_list('id', 'headline')
<QuerySet [(1, 'First entry'), ...]>
>>> from django.db.models.functions import Lower
>>> Entry.objects.values_list('id', Lower('headline'))
<QuerySet [(1, 'first entry'), ...]>
Wenn Sie nur QuerySets erstellen, greifen Sie nicht auf die Datenbank zu.
>>> q = accounts.objects.filter(name__startswith="T")
>>> q = q.filter(created_at__lte=datetime.date.today())
>>> q = q.exclude(age__gte=30)
>>> print(q)
Es sieht so aus, als würden Sie dreimal auf die Datenbank zugreifen, aber es ist eigentlich nur der letzte "print (q)". Obwohl die Entwicklung klein ist, kann es sein, dass dies passiert, aber ich habe es geschrieben, weil ich mir Sorgen mache, dass ich viele Male schwere Prozesse in die Datenbank werfen könnte.
https://docs.djangoproject.com/ja/3.1/topics/db/queries/ https://docs.djangoproject.com/ja/3.1/ref/models/querysets/
[Anfänger] # 2 Django Query Database Acquisition 1-zu-viele und viele-zu-viele
Recommended Posts