Partage de technologie

Opérations ORM courantes de Django telles que l'ajout, la suppression, la modification, la recherche, le tri et le regroupement

2024-07-12

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

L'ORM (Object Relational Mapping) de Django fournit un moyen pratique d'interagir avec la base de données.

1. Modèle Django


在 `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

Exécutez la commande de migration pour créer les tables de base de données :

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

2. Créer

Créer un seul objet
from myapp.models import Person

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

3. Lire

Obtenez tous les objets
people = Person.objects.all()
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
Obtenez un seul objet
person = Person.objects.get(id=1)
print(person.name, person.age, person.city)
  • 1
  • 2
Utiliser des filtres
# 获取所有年龄大于25的人
people = Person.objects.filter(age__gt=25)
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
  • 4

4. Mise à jour

Mettre à jour un seul objet
person = Person.objects.get(id=1)
person.age = 26
person.save()
  • 1
  • 2
  • 3
Mise à jour par lots
Person.objects.filter(city='New York').update(city='NYC')
  • 1

5. Supprimer

Supprimer un seul objet
person = Person.objects.get(id=1)
person.delete()
  • 1
  • 2
suppression par lots
Person.objects.filter(age__lt=20).delete()
  • 1

6. Commande

Trier par un seul champ
people = Person.objects.all().order_by('age')
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
Trier par plusieurs champs
people = Person.objects.all().order_by('city', '-age')
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3

7. Regroupement

L'ORM Django ne prend pas directement en charge les opérations de regroupement, mais vous pouvez utiliser annotate etaggregate méthodes pour obtenir des fonctionnalités similaires.

utiliser annotate Effectuer un comptage de groupe
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
utiliser aggregate Effectuer des opérations d'agrégation
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. Requêtes complexes

Objets Q pour les requêtes complexes
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
Les objets F effectuent des comparaisons entre les champs
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