SQLModel nədir
SQLModel FastAPI müəlliflərinin kitabxanasıdır. Bir sinif eyni anda həm SQLAlchemy cədvəli, həm də Pydantic modeli ola bilər, ona görə sahələri bir dəfə təsvir edirsiniz və onlar həm baza, həm sorğunun yoxlanması, həm də cavab üçün işləyir.
| Sinif | table=True | Rolu |
|---|---|---|
HeroBase | yox | ortaq sahələr |
Hero | bəli | baza cədvəli |
HeroCreate | yox | sorğu gövdəsi |
HeroPublic | yox | cavab modeli |
HeroUpdate | yox | PATCH gövdəsi |
Quraşdırma: pip install sqlmodel fastapi. Kitabxana hələ 0.0.x versiyalarındadır, ona görə versiyanı sabitləyin və yeniləmədən əvvəl dəyişiklik jurnalını oxuyun.
💡 SQLModel SQLAlchemy üzərində nazik qatdır. Qabaqcıl imkan lazım olanda SQLAlchemy-dən birbaşa istifadə edə bilərsiniz.
Modellər və ilk sorğu
from sqlmodel import Field, Session, SQLModel, create_engine, select
class Hero(SQLModel, table=True):
id: int | None = Field(default=None, primary_key=True)
name: str
age: int | None = None
engine = create_engine("sqlite://")
SQLModel.metadata.create_all(engine)
with Session(engine) as session:
session.add(Hero(name="Deadpond", age=30))
session.add(Hero(name="Rusty-Man", age=48))
session.commit()
stmt = select(Hero).where(Hero.age > 35)
heroes = session.exec(stmt).all()
print([h.name for h in heroes])
# ['Rusty-Man']id tipi int | None-dur, çünki baza onu commit zamanı verir. Cədvəlin adı susmaya görə sinfin kiçik hərflərlə adıdır (hero).
| Çağırış | Nə edir |
|---|---|
session.add(obj) | obyekti sessiyaya qoyur |
session.commit() | dəyişiklikləri yazır |
session.refresh(obj) | obyekti yenidən oxuyur (id dolur) |
session.get(Hero, 1) | açara görə obyekt və ya None |
session.exec(select(...)) | sorğunu icra edir: .all(), .first(), .one() |
session.delete(obj) | silməni qeyd edir, commit lazımdır |