Connessione a MySQL con Python, FastAPI e SQLAlchemy
Ho deciso di dare uno sguardo a FastAPI, framework per la creazione di API in Python.
Mi sembra veloce facile da imparare.....a parte quando si tratta di gestire il db.
Personalmente odio gli ORM, ma la maggior parte dei framework suggeriscono di usarli.
Comunque, oggi vediamo come connettere la nostra API ad un db MySQL o MariaDB.
Cominciamo con l'installare tutti i pacchetti con pip:
pip install fastapi "uvicorn[standard]" sqlalchemy pymysql
Per la connessione al db useremo SQLAlchemy, consigliato anche sul sito ufficiale.
Cominciamo proprio dalla connessione (database.py):
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine(
"mysql+pymysql://root:9211@localhost/test"
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
Poi creiamo il model della nostra tabella (models.py):
from sqlalchemy import Column, Integer, String
from database import Base
class Utente(Base):
__tablename__ = "utenti"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True)
password = Column(String)
Passiamo agli schema per Pydantic (schemas.py):
from pydantic import BaseModel
class Utente(BaseModel):
id: int
email: str
password: str
class Config:
orm_mode = True
Infine il nostro main.py:
from typing import List
from fastapi import FastAPI
import models
import schemas
from database import SessionLocal, engine
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
db = SessionLocal()
@app.get("/", response_model=List[schemas.Utente])
async def read_root():
records = db.query(models.Utente).all()
return records
Adesso dovete solo avviare il programma:
uvicorn main:app --reload
PS: personalmente trovo tutto molto, troppo, laborioso: mi immagino un programma con 50 tabelle.....quindi prossimanente scriverò un tutorial in cui prenderemo i dati eseguendo le nostre query / stored procedure (cosa che mi piace molto di più).
Enjoy!
python pip fastapi sqlalchemy mysql mariadb pydantic
Commentami!