Desarrollo
Primero vamos a comenzar por el desarrollo de una api rest en python que es el tema central del ejercicio para ver el coste de esfuerzo que cuesta en desarrllar con fast api ya que a la hora de diseñar un software hay en ocasiones que a uno como consultor el cliente te llega pedir una solución, la clásica sería con springboot pero en este ejercicio queremos ver que tanto implica desarrollar en python.Abrimos Pycharm y creamos un proyecto le vamos a nombrar Micoven(Mi control de ventas)

Dependencias
Vamos a instalar las siguientes dependencias que vamos a utilizar para crear nuestro proyecto son las siguientes:- sqlalchemy
- fastapi
- uvicorn
- pymysql

Una vez ya instaladas nuestras dependecias creamos el archivo models.py
from sqlalchemy import Boolean,Column,Integer,String
from database import Base
class Usuario(Base):
__tablename__ = 'usuario'
email= Column(String(200),primary_key=True,index=True)
nombre= Column(String(150))
apellidopaterno= Column(String(150))
apellidomaterno= Column(String(150))
password= Column(String(150))
Creamos el archivo database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import declarative_base
URL_DATABASE = 'mysql+pymysql://admin:adminlara@127.0.0.1:3306/micovendb'
engine = create_engine(URL_DATABASE)
SessionLocal = sessionmaker(autocommit=False,autoflush=False,bind=engine)
Base=declarative_base()
Creamos un archivo llamado main.py
from fastapi import FastAPI,HTTPException,Depends,status
from pydantic import BaseModel
from typing import Annotated
import models
from database import engine,SessionLocal
from sqlalchemy.orm import Session
import uvicorn
app = FastAPI()
models.Base.metadata.create_all(bind=engine)
class UsuarioBase(BaseModel):
email:str
nombre:str
apellidopaterno:str
apellidomaterno:str
password:str
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
db_dependency = Annotated[Session,Depends(get_db)]
@app.get("/usuario/{email}",status_code=status.HTTP_200_OK)
async def get_usuario(email:str,db:db_dependency):
usuario=db.query(models.Usuario).filter(models.Usuario.email==email).first()
if usuario is None:
raise HTTPException(status_code=404,detail='El usario no funciona')
return usuario
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8000)