Mallien määrittäminen
Kuvaa luokat tauluiksi
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
DeclarativeBaseja määrittävät attribuutin__tablename__ - Sarakkeissa käytetään merkintää
Mapped[type]ja funktiotamapped_column() primary_key,uniquejadefaultlisäävät rajoitteitacreate_all()luo taulut
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
- SQLAlchemy Core vai ORM
- Mallien määrittäminen
- Kyselyt Sessionilla
- Relaatiot ja liitokset