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
File details
Details for the file sqlmodel-serializers-0.0.2.tar.gz
.
File metadata
- Download URL: sqlmodel-serializers-0.0.2.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 699ed64d615e360ea3f42fd12aa5bc4dbd04bfd56c284d31cc1745a8dc6dad17 |
|
MD5 | aa0b38c193c37888ea96f61b2b30b233 |
|
BLAKE2b-256 | 06dd31ca4860aad855f35eac90e9f15e52f5d6a8e83f34cba9c24e05637bb97f |
File details
Details for the file sqlmodel_serializers-0.0.2-py3-none-any.whl
.
File metadata
- Download URL: sqlmodel_serializers-0.0.2-py3-none-any.whl
- Upload date:
- Size: 5.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b941c4439c6765437b4673b3b63f5bbb2d3da8ffd71f715d7c9e3cd41c9ff7ac |
|
MD5 | 53d16dbc81590b3bea75a7c0791a6fad |
|
BLAKE2b-256 | bac3036ae097acb3ba14bd539eb80e1dce8a50b6d7c8feb4c6c1891925d7a85b |