Aller au contenu

Python/Django ORM

Avy amin'i Wikibooks

Torolàlana Django ORM: Endri-javatra Fototra sy Mandroso

[hanova]

Django ORM (Object-Relational Mapping) dia fitaovana mahery vaika izay mamela anao hiasa amin'ny tahiry amin'ny alalan'ny modely Python, ka tsy mila manoratra SQL mivantana. Ity cheatsheet ity dia manome topi-maso fohy momba ny endri-javatra fototra sy mandroso amin'ny Django ORM.

Fomba fototra amin'ny Django ORM

[hanova]
  • Fametrahana sy Fampiasana ny Django :

Mba hampiasana Django ORM dia mila mametraka sy mampifandray amin'ny tetikasa Django ianao.

pip install django
django-admin startproject myproject
cd myproject
python manage.py startapp myapp
  • Famoronana Modely (Models) :

Modely dia kilasy iray izay maneho ny firafitry ny tahiry ao amin'ny Django ORM.

from django.db import models

class User(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()
    email = models.EmailField()

    def __str__(self):
        return self.name
  • Fampiharana Migrations :

Migrations dia ampiasaina amin'ny famoronana sy fanavaozana ny firafitry ny tahiry mifototra amin'ny modely.

python manage.py makemigrations
python manage.py migrate
  • Fametrahana Angona ao amin'ny Tahiry :

Azonao atao ny mametraka angona vaovao ao amin'ny tahiry amin'ny alalan'ny famoronana zavatra avy amin'ny modely.

user = User(name='Rakoto', age=30, email='rakoto@example.com')
user.save()
  • Fikarohana Angona :

Django ORM dia manohana ny fikarohana angona amin'ny alalan'ny methods toy ny all(), filter(), ary get().

users = User.objects.all()
for user in users:
    print(user.name, user.age)

rakoto = User.objects.get(name='Rakoto')
print(rakoto.email)
  • Fanavaozana sy Famafana Angona :

Azonao atao ny manavao na mamafa angona avy amin'ny tahiry amin'ny alalan'ny zavatra modely.

Fanavaozana
rakoto = User.objects.get(name='Rakoto')
rakoto.age = 31
rakoto.save()
Famafana
rakoto.delete()

Endri-javatra Mandroso amin'ny Django ORM

[hanova]
  • Fifandraisana (Relationships) :

Django ORM dia manohana ny fifandraisana eo amin'ny modely toy ny One-to-Many, Many-to-Many, ary ny ForeignKey.

ForeignKey (One-to-Many)
class Address(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    city = models.CharField(max_length=100)
    street = models.CharField(max_length=100)
Many-to-Many
class Group(models.Model):
    name = models.CharField(max_length=100)
    members = models.ManyToManyField(User)

group = Group(name='Developers')
group.save()
group.members.add(rakoto)
  • Queries Mandroso :

Django ORM dia manohana queries mandroso toy ny Q objects sy ny annotate() ary ny aggregate().

Q Objects
from django.db.models import Q

results = User.objects.filter(Q(name='Rakoto') | Q(age=25))
Annotate sy Aggregate
from django.db.models import Count

groups = Group.objects.annotate(num_members=Count('members'))
for group in groups:
    print(group.name, group.num_members)
  • Managers (Fandrindrana Queries) :

Managers dia ampiasaina hamaritana queries manokana ao amin'ny modely.

class UserManager(models.Manager):
    def get_adults(self):
        return self.filter(age__gte=18)

class User(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()
    objects = UserManager()

adults = User.objects.get_adults()
  • Transactions :

Django ORM dia manohana ny transactions ho an'ny fanavaozana angona miverina.

from django.db import transaction

with transaction.atomic():
    user = User(name='Rabe', age=25)
    user.save()
    address = Address(user=user, city='Antananarivo', street='Lalana Andrianampoinimerina')
    address.save()
  • Fikarohana sady mamerina angona be dia be (QuerySet Chaining) :

Django ORM dia manohana ny chaining amin'ny queryset mba hanaovana queries lava be sy marina.

results = User.objects.filter(age__gte=18).exclude(email__isnull=True).order_by('-age')
  • Custom Query Expressions :

Django ORM dia manohana ny fampiasana custom expressions ao amin'ny queries.

from django.db.models import F

users = User.objects.filter(age__gte=F('group__min_age'))

Fehiny

[hanova]

Django ORM dia fitaovana mahery vaika sy mora ampiasaina ho an'ny fitantanana tahiry amin'ny alalan'ny modely Python. Amin'ny alalan'ny fahalalana ireo endri-javatra fototra sy mandroso ireo, dia afaka mamorona rindrambaiko matotra sy manintona ianao amin'ny alalan'ny Django ORM, ka manamora ny fitantanana angona sy ny fifandraisana amin'ny tahiry.