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.
在 `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
Exécutez la commande de migration pour créer les tables de base de données :
python manage.py makemigrations
python manage.py migrate
from myapp.models import Person
# 创建并保存一个新对象
person = Person(name='Alice', age=25, city='New York')
person.save()
create()
méthodeperson = Person.objects.create(name='Bob', age=30, city='Los Angeles')
people = Person.objects.all()
for person in people:
print(person.name, person.age, person.city)
person = Person.objects.get(id=1)
print(person.name, person.age, person.city)
# 获取所有年龄大于25的人
people = Person.objects.filter(age__gt=25)
for person in people:
print(person.name, person.age, person.city)
person = Person.objects.get(id=1)
person.age = 26
person.save()
Person.objects.filter(city='New York').update(city='NYC')
person = Person.objects.get(id=1)
person.delete()
Person.objects.filter(age__lt=20).delete()
people = Person.objects.all().order_by('age')
for person in people:
print(person.name, person.age, person.city)
people = Person.objects.all().order_by('city', '-age')
for person in people:
print(person.name, person.age, person.city)
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.
annotate
Effectuer un comptage de groupefrom 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'])
aggregate
Effectuer des opérations d'agrégationfrom 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}
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)
from django.db.models import F
# 获取年龄大于等于城市长度的人
people = Person.objects.filter(age__gte=F('city__length'))
for person in people:
print(person.name)