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.

Bir baza, cədvəl və sxemlər
Bir baza, cədvəl və sxemlər
Siniftable=TrueRolu
HeroBaseyoxortaq sahələr
Herobəlibaza cədvəli
HeroCreateyoxsorğu gövdəsi
HeroPublicyoxcavab modeli
HeroUpdateyoxPATCH 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

python
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