0Pricing
Python Academy · Lekcja

Definiowanie modeli

Mapuj klasy na tabele

Definiowanie modeli to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.

Modele mapują się na tabele

W ORM SQLAlchemy model to klasa Pythona mapowana na tabelę bazy danych. Każda instancja staje się wierszem.

Modele dziedziczą po wspólnej klasie Base.

from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
    pass
print('Base class ready')

__tablename__

Każdy model ustawia __tablename__, aby nadać nazwę swojej tabeli. SQLAlchemy używa tej nazwy podczas generowania kodu SQL.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
print(User.__tablename__)

Kolumny z użyciem Mapped

Współczesne wersje SQLAlchemy deklarują kolumny za pomocą adnotacji typów: Mapped[int] i mapped_column(). Adnotacja typu określa typ Pythona i dostarcza informacji o typie kolumny.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    age: Mapped[int]
print('User has id, name, age')

Klucz główny

Oznacz kolumnę jako klucz główny za pomocą primary_key=True. Klucze główne typu całkowitego są domyślnie automatycznie zwiększane.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class Product(Base):
    __tablename__ = 'products'
    id: Mapped[int] = mapped_column(primary_key=True)
    title: Mapped[str]
print('id is the primary key')

Kolumny opcjonalne

Użyj Mapped[str | None] lub Optional[str], aby zezwolić na wartości NULL. Zwykłe Mapped[str] oznacza NOT NULL.

from typing import Optional
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    nickname: Mapped[Optional[str]]
print('nickname can be NULL')

Wartości domyślne i unikalność

mapped_column() przyjmuje opcje takie jak unique=True i default=, aby dodawać ograniczenia oraz wartości zastępcze.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    email: Mapped[str] = mapped_column(unique=True)
    active: Mapped[bool] = mapped_column(default=True)
print('email is unique, active defaults to True')

Długość ciągu znaków

W przypadku baz danych, które tego wymagają, ustaw długość ciągu znaków za pomocą mapped_column(String(50)).

from sqlalchemy import String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column(String(50))
print('name limited to 50 chars')

Tworzenie schematu

Base.metadata.create_all(engine) tworzy tabele dla każdego modelu dziedziczącego po Base.

from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
print('Schema created')

Tworzenie instancji

Utwórz wiersz, inicjalizując model jak zwykły obiekt Pythona i przekazując wartości kolumn jako argumenty nazwane.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
u = User(name='Alice')
print(u.name)

Dodawanie __repr__

Własna metoda __repr__ ułatwia debugowanie, ponieważ przejrzyście pokazuje dane obiektu.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    def __repr__(self):
        return 'User(name=' + self.name + ')'
print(repr(User(name='Bob')))

Modele pozostają zwykłym Pythonem

Model nadal jest zwykłą klasą. Możesz dodawać metody i właściwości operujące na jego danych, łącząc zachowanie z utrwalaniem danych.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
    pass
class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    def greet(self):
        return 'Hi, ' + self.name
print(User(name='Carol').greet())

Szybki test

Sprawdź swoje umiejętności definiowania modeli.

Podsumowanie

Nauczyłeś się definiować modele ORM.

  • Modele dziedziczą po DeclarativeBase i ustawiają __tablename__
  • Kolumny korzystają z Mapped[type] i mapped_column()
  • primary_key, unique i default dodają ograniczenia
  • create_all() tworzy tabele

Często zadawane pytania

Czy lekcja „Definiowanie modeli” jest bezpłatna?

Tak — pełny tekst „Definiowanie modeli” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Definiowanie modeli”?

Mapuj klasy na tabele Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Python Academy?

Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Definiowanie modeli”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?

Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. SQLAlchemy Core a ORM
  2. Definiowanie modeli
  3. Zapytania za pomocą Session
  4. Relacje i złączenia
← Powrót do Python Academy