Sobes.tech
Middle

Kada u Django ORM-u praviš upite sa povezanim modelima, kako izbegavaš suvišne SQL upite? Koja dva ORM mehanizma poznaješ?

sobes.tech АИ

Одговор од АИ

U Django ORM-u, da biste izbegli suvišne SQL upite prilikom rada sa povezanim modelima, koriste se dva osnovna mehanizma:

  1. select_related — izvršava SQL JOIN i učitava povezane objekte u istom upitu. Radi za polja ForeignKey i OneToOne.

  2. prefetch_related — izvršava poseban upit za povezane objekte i povezuje ih u Pythonu. Pogodno za ManyToMany i obrnute veze.

Primer:

# Bez optimizacije
books = Book.objects.all()
for book in books:
    print(book.author.name)  # za svaku knjigu poseban upit za autora

# Sa select_related
books = Book.objects.select_related('author').all()
for book in books:
    print(book.author.name)  # jedan upit sa JOIN-om

# Sa prefetch_related za ManyToMany
books = Book.objects.prefetch_related('tags').all()
for book in books:
    for tag in book.tags.all():
        print(tag.name)

Korišćenje ovih metoda značajno smanjuje broj upita i poboljšava performanse.

Kada u Django ORM-u praviš upite sa povezanim… - sobes.tech