panedrone / sdm_todolist_fastapi_no_orm

A project demonstrating how to use SQL DAL Maker + Python, FastAPI, and no-ORM-scenario

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

sdm_todolist_fastapi_no_orm

A project demonstrating how to use SQL DAL Maker + Python, FastAPI, and no-ORM-scenario.

Front-end is written in Vue.js 2.7. RDBMS is SQLite3.

demo-go.png

sdm.xml

<sdm>

    <dto-class name="Project" ref="projects"/>

    <dto-class name="ProjectLi" ref="get_projects.sql"/>

    <dto-class name="Task" ref="tasks"/>

    <dto-class name="TaskLi" ref="get_project_tasks.sql"/>

    <dao-class name="ProjectsDao">
        <crud dto="Project"/>
        <query-dto-list dto="ProjectLi" method="get_projects"/>
    </dao-class>

    <dao-class name="TasksDao">
        <crud dto="Task"/>
        <query-dto-list dto="TaskLi" method="get_project_tasks(p_id)"/>
    </dao-class>

</sdm>

Generated code in action:

from typing import List
from fastapi import Depends, FastAPI
from dbal.db import get_ds
from dbal.data_store import DataStore
from dbal.project import Project
from dbal.projects_dao import ProjectsDao
from schemas import *

app = FastAPI(title="SDM + FastAPI, no-ORM, SQLite3",
              description="Quick Demo of how to use SQL DAL Maker + FastAPI, no-ORM, SQLite3",
              version="1.0.0", )


@app.get('/api/projects', tags=["ProjectList"], response_model=List[SchemaProjectLi])
def get_all_projects(ds: DataStore = Depends(get_ds)):
    return ProjectsDao(ds).get_projects()


@app.post('/api/projects', tags=["ProjectList"], status_code=201)
async def project_create(item_request: SchemaProjectCreateUpdate, ds: DataStore = Depends(get_ds)):
    project = Project()
    project.p_name = item_request.p_name
    ProjectsDao(ds).create_project(project)
    ds.commit()


@app.get('/api/projects/{p_id}', tags=["Project"], response_model=SchemaProject)
def project_read(p_id: int, ds: DataStore = Depends(get_ds)):
    pr = Project()
    ProjectsDao(ds).read_project(p_id, pr)
    return pr


@app.put('/api/projects/{p_id}', tags=["Project"])
async def project_update(p_id: int, item_request: SchemaProjectCreateUpdate, ds: DataStore = Depends(get_ds)):
    pr = Project()
    pr.p_id = p_id
    pr.p_name = item_request.p_name
    ProjectsDao(ds).update_project(pr)
    ds.commit()


@app.delete('/api/projects/{p_id}', tags=["Project"], status_code=204)
async def project_delete(p_id: int, ds: DataStore = Depends(get_ds)):
    ProjectsDao(ds).delete_project(p_id)
    ds.commit()

About

A project demonstrating how to use SQL DAL Maker + Python, FastAPI, and no-ORM-scenario


Languages

Language:JavaScript 91.4%Language:Python 6.2%Language:HTML 2.0%Language:CSS 0.4%