Κοινή χρήση τεχνολογίας

Οι κοινές λειτουργίες ORM του Django, όπως προσθήκη, διαγραφή, τροποποίηση, αναζήτηση, ταξινόμηση και ομαδοποίηση

2024-07-12

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

Το ORM (Object Relational Mapping) του Django παρέχει έναν βολικό τρόπο αλληλεπίδρασης με τη βάση δεδομένων.

1. Μοντέλο 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

Εκτελέστε την εντολή μετεγκατάστασης για να δημιουργήσετε τους πίνακες της βάσης δεδομένων:

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

2. Δημιουργία

Δημιουργήστε ένα ενιαίο αντικείμενο
from myapp.models import Person

# 创建并保存一个新对象
person = Person(name='Alice', age=25, city='New York')
person.save()
  • 1
  • 2
  • 3
  • 4
  • 5
χρήση create() μέθοδος
person = Person.objects.create(name='Bob', age=30, city='Los Angeles')
  • 1

3. Διαβάστε

Πάρτε όλα τα αντικείμενα
people = Person.objects.all()
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
Αποκτήστε ένα μόνο αντικείμενο
person = Person.objects.get(id=1)
print(person.name, person.age, person.city)
  • 1
  • 2
Χρησιμοποιήστε φίλτρα
# 获取所有年龄大于25的人
people = Person.objects.filter(age__gt=25)
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
  • 4

4. Ενημέρωση

Ενημερώστε ένα μεμονωμένο αντικείμενο
person = Person.objects.get(id=1)
person.age = 26
person.save()
  • 1
  • 2
  • 3
Ενημέρωση παρτίδας
Person.objects.filter(city='New York').update(city='NYC')
  • 1

5. Διαγραφή

Διαγράψτε ένα μεμονωμένο αντικείμενο
person = Person.objects.get(id=1)
person.delete()
  • 1
  • 2
διαγραφή παρτίδας
Person.objects.filter(age__lt=20).delete()
  • 1

6. Παραγγελία

Ταξινόμηση κατά ένα μόνο πεδίο
people = Person.objects.all().order_by('age')
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3
Ταξινόμηση κατά πολλαπλά πεδία
people = Person.objects.all().order_by('city', '-age')
for person in people:
    print(person.name, person.age, person.city)
  • 1
  • 2
  • 3

7. Ομαδοποίηση

Το Django ORM δεν υποστηρίζει απευθείας λειτουργίες ομαδοποίησης, αλλά μπορείτε να το χρησιμοποιήσετε annotate καιaggregate μεθόδους για την επίτευξη παρόμοιας λειτουργικότητας.

χρήση annotate Εκτελέστε ομαδική καταμέτρηση
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
χρήση aggregate Εκτελέστε λειτουργίες συγκέντρωσης
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. Πολύπλοκα ερωτήματα

Αντικείμενα Q για πολύπλοκα ερωτήματα
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 εκτελούν συγκρίσεις μεταξύ πεδίων
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