İ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.
ForeignKeybağlantıyı alt nesnenin sütununda saklarrelationship()veback_populatesiki 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
- SQLAlchemy Core ve ORM Karşılaştırması
- Modelleri Tanımlama
- Session ile Sorgulama
- İlişkiler ve Birleştirmeler