Model serializer for SQLModel
Project description
sqlmodel-serializers
DRF like SQLModel serializer which allows us to create valid response schemes and easily add dynamic fields in responses
Installation
pip install sqlmodel-serializers
Usage
from sqlmodel_serializers import SQLModelSerializer
from .models import Hero
class HeroUpdate(SQLModelSerializer):
class Meta:
model = Hero
optional = '__all__'
fields = ('name', 'secret_name', 'age')
class HeroRead(SQLModelSerializer):
id: int
full_name: str
class Meta:
model = Hero
class HeroCreate(SQLModelSerializer):
class Meta:
model = Hero
fields = ('name', 'secret_name', 'age')
Now you can create your routes like this:
from typing import List
from sqlmodel import Session, select
from fastapi import FastAPI, HTTPException, status
from .models import engine, Hero, create_tables
from .serializers import HeroRead, HeroCreate, HeroUpdate
app = FastAPI()
@app.on_event("startup")
def on_startup():
create_tables(engine)
@app.post("/heroes", response_model=HeroRead)
def create_hero(data: HeroCreate):
hero = Hero(**data.dict())
with Session(engine) as session:
session.add(hero)
session.commit()
session.refresh(hero)
return hero
@app.get("/heroes", response_model=List[HeroRead])
def read_heroes():
with Session(engine) as session:
heroes = session.exec(select(Hero)).all()
return heroes
@app.get('/heroes/pk', response_model=HeroRead)
def retrieve_hero(pk: int):
with Session(engine) as session:
instance = session.get(Hero, pk)
if not instance:
raise HTTPException(
detail='Hero not found',
status_code=status.HTTP_404_NOT_FOUND
)
return instance
@app.patch('/heroes/{pk}', response_model=HeroRead)
def update_hero(pk: int, data: HeroUpdate):
with Session(engine) as session:
instance = session.get(Hero, pk)
if not instance:
raise HTTPException(
detail='Hero not found',
status_code=status.HTTP_404_NOT_FOUND
)
hero_data = data.dict(exclude_unset=True)
for key, value in hero_data.items():
setattr(instance, key, value)
session.add(instance)
session.commit()
session.refresh(instance)
return instance
This results in these schemes
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for sqlmodel-serializers-0.0.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1c6227ad247c72c218e38a3eb8187cae16613b6ae998dda8ef46cbee15885a75 |
|
MD5 | ae0f156919be22240796e877db862801 |
|
BLAKE2b-256 | 9b62524d0d79d49cf80f96fb1b41f0120c2befe033ec73883ffc6a5514330a96 |
Close
Hashes for sqlmodel_serializers-0.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f8dfe06053fbe8901226032be3b3a612dc56640d8eb81b349e626c598fc6fd56 |
|
MD5 | ded34883d50782afca247dfc2929b6b9 |
|
BLAKE2b-256 | 79ada4d20783cf401dbcefa883575409ef2f2e7d29f40cb223b3cafe58dbf09d |