Condivisione della tecnologia

Le operazioni ORM comuni di Django come aggiunta, eliminazione, modifica, ricerca, ordinamento e raggruppamento

2024-07-12

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

L'ORM (Object Relational Mapping) di Django fornisce un modo conveniente per interagire con il database.

1. Modello 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

Esegui il comando di migrazione per creare le tabelle del database:

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

2. Crea

Crea un singolo oggetto
from myapp.models import Person

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

3. Leggi

Ottieni tutti gli oggetti
people = Person.objects.all()
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
Ottieni un singolo oggetto
person = Person.objects.get(id=1)
print(person.name, person.age, person.city)
  • 1
  • 2
Usa i filtri
# 获取所有年龄大于25的人
people = Person.objects.filter(age__gt=25)
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
  • 4

4. Aggiorna

Aggiorna un singolo oggetto
person = Person.objects.get(id=1)
person.age = 26
person.save()
  • 1
  • 2
  • 3
Aggiornamento batch
Person.objects.filter(city='New York').update(city='NYC')
  • 1

5. Elimina

Elimina un singolo oggetto
person = Person.objects.get(id=1)
person.delete()
  • 1
  • 2
cancellazione batch
Person.objects.filter(age__lt=20).delete()
  • 1

6. Ordinazione

Ordina per singolo campo
people = Person.objects.all().order_by('age')
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
Ordina per più campi
people = Person.objects.all().order_by('city', '-age')
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3

7. Raggruppamento

Django ORM non supporta direttamente le operazioni di raggruppamento, ma puoi utilizzarle annotate Eaggregate metodi per ottenere funzionalità simili.

utilizzo annotate Eseguire il conteggio di gruppo
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
utilizzo aggregate Eseguire operazioni di aggregazione
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. Domande complesse

Oggetti Q per query complesse
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
Gli oggetti F eseguono confronti tra campi
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