0Pricing
Python Academy · Ders

İlişkiler ve Birleştirmeler

İlişkili tabloları modelleyin

İlişkiler ve Birleştirmeler, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.

İlişkili Tablolar

Gerçek veriler birbiriyle bağlantılıdır: bir yazarın birçok kitabı, bir siparişin birçok ürünü olabilir. SQLAlchemy bu bağlantıları ilişkiler ve yabancı anahtarlar ile modeller.

# Author 1 --- many --- Book
# A foreign key on Book points back to Author
print('One-to-many is the most common link')

Yabancı Anahtarlar

Bir yabancı anahtar sütunu, ilişkili satırın birincil anahtarını saklar. Bunu ForeignKey('table.column') ile bildirin.

from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, mapped_column
# author_id: Mapped[int] = mapped_column(ForeignKey('authors.id'))
print('ForeignKey links child to parent')

Ebeveyni Tanımlama

Ebeveyn modeli, alt nesnelerden oluşan bir koleksiyonu tutmak için relationship() kullanır.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
from typing import List
class Base(DeclarativeBase):
    pass
class Author(Base):
    __tablename__ = 'authors'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    books: Mapped[List['Book']] = relationship(back_populates='author')
print('Author.books holds related Book objects')

Alt Nesneyi Tanımlama

Alt nesne modelinde yabancı anahtar sütununun yanı sıra ebeveyne geri işaret eden bir relationship() bulunur.

from sqlalchemy import ForeignKey
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
class Base(DeclarativeBase):
    pass
class Book(Base):
    __tablename__ = 'books'
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
    author_id: Mapped[int] = mapped_column(ForeignKey('authors.id'))
    author: Mapped['Author'] = relationship(back_populates='books')
print('Book.author points to its parent')

back_populates

back_populates, iki ilişkiyi birbirine bağlar; böylece bir tarafta yapılan güncelleme otomatik olarak diğer tarafa da yansır.

# author.books.append(book) also sets book.author = author
# Both sides stay in sync automatically
print('back_populates keeps both sides consistent')

İlişkilerde Gezinme

Bağlantı kurulduktan sonra ilişkiyi normal öznitelikler gibi kullanırsınız: author.books bir listedir, book.author ise ebeveyn nesnesidir.

# for book in author.books:
#     print(book.title)
# print(book.author.name)
print('Navigate with plain attribute access')

Grafik Oluşturma

Alt nesneleri ebeveynin koleksiyonuna ekleyin. Ebeveyni oturuma eklemek, alt nesnelerin de oturuma eklenmesini sağlar.

# a = Author(name='Rowling')
# a.books.append(Book(title='Book 1'))
# session.add(a)
# session.commit()  # author and book both saved
print('Cascade saves the whole object graph')

Örtük Birleştirmeler

book.author erişimi, SQLAlchemy'nin ilişkili satırı arka planda otomatik olarak yüklemesini tetikler (geç yükleme).

# Accessing book.author runs a SELECT if not loaded yet
# This is lazy loading
print('Lazy loading fetches related rows on access')

Açık Birleştirmeler

Tablolar arasında filtreleme yapmak için bir select içinde join() kullanın. Bu işlem bir SQL JOIN oluşturur.

from sqlalchemy import select
# stmt = select(Book).join(Author).where(Author.name == 'Rowling')
# books = session.scalars(stmt).all()
print('join(Author) filters across the relationship')

Önden Yükleme

Çok sayıda küçük sorgudan kaçınmak için ilişkili satırları joinedload veya selectinload ile önceden yükleyin.

from sqlalchemy import select
from sqlalchemy.orm import selectinload
# stmt = select(Author).options(selectinload(Author.books))
print('selectinload preloads children in one extra query')

Çoka Çoka İlişkiler

Çoka çoka bağlantılarda bir ilişkilendirme tablosu iki tarafı birbirine bağlar. relationship(), bu tabloyu göstermek için secondary= kullanır.

# students <-> courses via a 'enrollments' association table
# courses: Mapped[List['Course']] = relationship(secondary=enrollments)
print('secondary= models many-to-many')

Hızlı Kontrol

İlişkiler hakkındaki bilginizi sınayın.

Özet

İlişkili tabloları modellemeyi öğrendiniz.

  • ForeignKey bağlantıyı alt nesnenin sütununda saklar
  • relationship() ve back_populates iki tarafı birbirine bağlar
  • Bağlantılarda normal öznitelikler olarak gezinin; geç yükleme, erişim sırasında verileri getirir
  • join() tablolar arasında filtreler; selectinload önden yükler; secondary= çoka çoka ilişkileri yönetir

Sıkça Sorulan Sorular

“İlişkiler ve Birleştirmeler” dersi ücretsiz mi?

Evet — “İlişkiler ve Birleştirmeler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.

“İlişkiler ve Birleştirmeler” dersinde ne öğreneceğim?

İlişkili tabloları modelleyin Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Python Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“İlişkiler ve Birleştirmeler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. SQLAlchemy Core ve ORM Karşılaştırması
  2. Modelleri Tanımlama
  3. Session ile Sorgulama
  4. İlişkiler ve Birleştirmeler
← Python Academy Sayfasına Dön