Connessione a MySQL con Python, FastAPI e SQLAlchemy

Mattepuffo's logo
Connessione a MySQL con Python, FastAPI e SQLAlchemy

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!


Condividi

Commentami!