Technologieaustausch

Djangos gängige ORM-Operationen wie Hinzufügen, Löschen, Ändern, Suchen, Sortieren und Gruppieren

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Djangos ORM (Object Relational Mapping) bietet eine bequeme Möglichkeit, mit der Datenbank zu interagieren.

1. Django-Modell


在 `myapp/models.py` 中定义一个示例模型:

```python
from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()
    city = models.CharField(max_length=100)

    def __str__(self):
        return self.name
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

Führen Sie den Migrationsbefehl aus, um die Datenbanktabellen zu erstellen:

python manage.py makemigrations
python manage.py migrate
  • 1
  • 2

2. Erstellen

Erstellen Sie ein einzelnes Objekt
from myapp.models import Person

# 创建并保存一个新对象
person = Person(name='Alice', age=25, city='New York')
person.save()
  • 1
  • 2
  • 3
  • 4
  • 5
verwenden create() Methode
person = Person.objects.create(name='Bob', age=30, city='Los Angeles')
  • 1

3. Lesen

Holen Sie sich alle Objekte
people = Person.objects.all()
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
Holen Sie sich ein einzelnes Objekt
person = Person.objects.get(id=1)
print(person.name, person.age, person.city)
  • 1
  • 2
Verwenden Sie Filter
# 获取所有年龄大于25的人
people = Person.objects.filter(age__gt=25)
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
  • 4

4. Aktualisieren

Ein einzelnes Objekt aktualisieren
person = Person.objects.get(id=1)
person.age = 26
person.save()
  • 1
  • 2
  • 3
Batch-Update
Person.objects.filter(city='New York').update(city='NYC')
  • 1

5. Löschen

Ein einzelnes Objekt löschen
person = Person.objects.get(id=1)
person.delete()
  • 1
  • 2
Stapellöschung
Person.objects.filter(age__lt=20).delete()
  • 1

6. Bestellung

Sortieren Sie nach einem einzelnen Feld
people = Person.objects.all().order_by('age')
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
Sortieren Sie nach mehreren Feldern
people = Person.objects.all().order_by('city', '-age')
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3

7. Gruppierung

Der Django ORM unterstützt Gruppierungsvorgänge nicht direkt, Sie können ihn aber verwenden annotate Undaggregate Methoden, um eine ähnliche Funktionalität zu erreichen.

verwenden annotate Führen Sie eine Gruppenzählung durch
from django.db.models import Count

# 按城市分组并计数
city_counts = Person.objects.values('city').annotate(count=Count('id'))
for city_count in city_counts:
    print(city_count['city'], city_count['count'])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
verwenden aggregate Führen Sie Aggregationsvorgänge durch
from django.db.models import Avg, Max, Min

# 计算平均年龄
average_age = Person.objects.aggregate(Avg('age'))
print(average_age)  # 输出: {'age__avg': 27.5}

# 计算最大和最小年龄
age_stats = Person.objects.aggregate(Max('age'), Min('age'))
print(age_stats)  # 输出: {'age__max': 30, 'age__min': 25}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

8. Komplexe Abfragen

Q-Objekte für komplexe Abfragen
from django.db.models import Q

# 获取年龄大于25或城市为'New York'的人
people = Person.objects.filter(Q(age__gt=25) | Q(city='New York'))
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
F-Objekte führen Vergleiche zwischen Feldern durch
from django.db.models import F

# 获取年龄大于等于城市长度的人
people = Person.objects.filter(age__gte=F('city__length'))
for person in people:
    print(person.name)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6