Python Academy · Oppitunti

Mallien määrittäminen

Kuvaa luokat tauluiksi

Oppitunti 2/413 vaihetta

Mallien määrittäminen on ilmainen Python Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Python Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mallit vastaavat tauluja

SQLAlchemy-ORM:ssä malli on Python-luokka, joka vastaa tietokannan taulua. Jokaisesta instanssista tulee yksi rivi.

Mallit periytyvät yhteisestä Base-luokasta.

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

__tablename__-attribuutti

Jokainen malli määrittää attribuutin __tablename__ avulla taulunsa nimen. SQLAlchemy käyttää tätä nimeä SQL:ää luodessaan.

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__)

Sarakkeet Mapped-tyypin avulla

Modernissa SQLAlchemissä sarakkeet määritellään tyyppimerkintöjen avulla: Mapped[int] ja mapped_column(). Tyyppimerkintä määrittää Python-tyypin ja antaa tietoa sarakkeen tyypistä.

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')

Ensisijainen avain

Merkitkää sarake ensisijaiseksi avaimeksi määritteellä primary_key=True. Kokonaislukuarvoiset ensisijaiset avaimet kasvavat oletusarvoisesti automaattisesti.

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')

Valinnaiset sarakkeet

Käyttäkää merkintää Mapped[str | None] tai Optional[str], jos haluatte sallia NULL-arvot. Tavallinen Mapped[str] tarkoittaa arvoa 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')

Oletusarvot ja yksilöllisyys

mapped_column() hyväksyy esimerkiksi asetukset unique=True ja default=, joilla lisätään rajoitteita ja oletusarvoja.

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')

Merkkijonon pituus

Asettakaahan merkkijonon pituus mapped_column(String(50))-määrityksellä, jos käyttämänne tietokanta edellyttää sitä.

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')

Skeeman luominen

Base.metadata.create_all(engine) luo taulut jokaiselle mallille, joka periytyy luokasta 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')

Instanssien luominen

Luokaa rivi muodostamalla mallista tavallinen Python-olio ja välittämällä sarakkeiden arvot nimettyinä argumentteina.

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)

__repr__-metodin lisääminen

Mukautettu __repr__ helpottaa virheenkorjausta näyttämällä olion tiedot selkeästi.

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')))

Mallit pysyvät tavallisina Python-luokkina

Malli on edelleen tavallinen luokka. Voitte lisätä siihen tietoja käsitteleviä metodeja ja ominaisuuksia sekä yhdistää toiminnallisuuden tietojen pysyvään tallentamiseen.

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())

Pikatesti

Testatkaa mallien määrittelytaitojanne.

Kertaus

Olette oppineet määrittelemään ORM-malleja.

  • Mallit perivät luokan DeclarativeBase ja määrittävät attribuutin __tablename__
  • Sarakkeissa käytetään merkintää Mapped[type] ja funktiota mapped_column()
  • primary_key, unique ja default lisäävät rajoitteita
  • create_all() luo taulut
Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
76
Oppitunnit
320

Usein kysytyt kysymykset

Onko oppitunti ”Mallien määrittäminen” ilmainen?

Kyllä – oppitunnin ”Mallien määrittäminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Python Academy-kurssin, päivitä CoddyKit PROhon. Python Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Mallien määrittäminen”?

Kuvaa luokat tauluiksi Harjoittelet Python Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Python Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Python Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Mallien määrittäminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Python Academy-oppitunnilla?

Kyllä. Jokainen Python Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. SQLAlchemy Core vai ORM
  2. Mallien määrittäminen
  3. Kyselyt Sessionilla
  4. Relaatiot ja liitokset
← Takaisin: Python Academy