[PYTHON] [Anfänger] Von der Django Query-Datenbank abrufen

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]

image.png

Umgebung

Wenn Sie mit Django CRUD möchten, überprüfen Sie mit Shell

Es ist mühsam, es auf der Seite anzuzeigen, um es einzeln zu überprüfen. Verwenden wir also die Shell.

Vorbereitung

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)

So erstellen Sie eine App zum Üben und geben Daten ein

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. スクリーンショット 2020-09-21 0.35.07.png

Sie können es mit "KUNDEN HINZUFÜGEN" hinzufügen.

Holen Sie sich Django-Daten mit Shell und Test

$ 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.

Grundlegende Abfrage abrufen

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

holen und filtern

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'

Praktische Methode zur Zustandserfassung

startswit, endwith Ich schrieb es wie filter (name__startwith = 'T'),

Beginnt mit launchwit ~ endwith endet mit ~

Es kann unter den folgenden Bedingungen erhalten werden.

Oben, unten, unten, oben

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

Es ist möglich, verschiedene Bedingungen zu überlappen

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

Limit: Geben Sie die Anzahl der Akquisitionen an

Modellname.objects.all()[:5] #Holen Sie sich 5(Limit 5)
Modellname.objects.all()[5:10] # 5~Holen Sie sich 10(OFFSET 5 LIMIT 5)

Ich möchte es mit Wörterbuch bekommen

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.

Holen Sie sich mit Taple (wenn der Schlüssel im Weg ist)

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'), ...]>

Dinge zu wissen, wenn Sie sich daran gewöhnt haben

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.

Referenz

https://docs.djangoproject.com/ja/3.1/topics/db/queries/ https://docs.djangoproject.com/ja/3.1/ref/models/querysets/

Wir werden auch in Zukunft weitere hinzufügen.

Fortsetzung: Beziehung

[Anfänger] # 2 Django Query Database Acquisition 1-zu-viele und viele-zu-viele

Recommended Posts

[Anfänger] Von der Django Query-Datenbank abrufen
Holen Sie sich die Abfragezeichenfolge (Abfragezeichenfolge) mit Django
Abfrageparameter für GET-Anforderungen mit Django abrufen
Holen Sie sich nur den Text aus dem Django-Formular.
Django Memo # 1 von Grund auf neu
Abrufen von Daten aus der Datenbank über ODBC mit Python (Access)
Strukturdaten von CHEMBLID abrufen
Django von vorne anfangen (Teil: 2)
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Django von vorne anfangen (Teil: 1)
Abfrageparameter für Flask GET abrufen
Generieren Sie eine URL-Abfrage aus JSON
Fragen Sie Athena von Lambda Python ab
Holen Sie sich die Zwischenablage aus den Maya-Einstellungen
Fangen Sie mit Django an! ~ Tutorial ⑥ ~
Verwenden Sie das Django-Modell vom Interpreter
Vorlagenregistrierung von Django Bootstrap
Django PostgreSQL Installation, Datenbankaufbau