Flask SQLAlchemy

Flask-SQLAlchemy è un'estensione per Flask che supporta l'uso di un Python SQL Toolkit chiamato SQLAlchemy.

Per iniziare a creare un'applicazione web, oltre all'importazione di Flask, devi anche importare la classe SQLAlchemy dal modulo Flask_sqlalchemy.

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

Si crea l'istanza in Flask con app = Flask(__name__).

Per abilitare la comunicazione con un database, l'estensione Flask-SQLAlchemy prende la posizione del database dell'applicazione dalla variabile di configurazione SQLALCHEMY_DATABASE_URI che si imposta come puoi vedere sotto (con SQLite).

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mioDB.db'

L'opzione SQLALCHEMY_TRACK_MODIFICATIONS viene impostata su False per disabilitare una funzionalità di Flask-SQLAlchemy che segnala ogni volta che sta per essere effettuata una modifica nel database.

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

Infine crei un oggetto SQLAlchemy e lo leghi alla tua app.

db = SQLAlchemy(app)

Un esempio di codice completo:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
#percorso del database ed il nome
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mioDB.db'
#per evitare le segnalazioni
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

#istanza del database
db = SQLAlchemy(app)
#routing per la visualizzazione della home page
@app.route('/')
@app.route('/home')
def home():
    return "Congratulazioni! Hai appena creato una web app con Flask che supporta i database!"

L'oggetto database db creato nella nostra applicazione contiene tutte le funzioni e gli strumenti sia di SQLAlchemy che di SQLAlchemy Object Relational Mapper (ORM). L'ORM di SQLAlchemy associa le classi Python definite dall'utente con le tabelle del database e le istanze di tali classi (oggetti) con le righe nelle loro tabelle corrispondenti. Le classi che rispecchiano le tabelle del database sono chiamate modelli.

Model

Model rappresenta una base dichiarativa in SQLAlchemy che può essere utilizzata per dichiarare i modelli. Affinché un elemento, libro come esempio, sia un modello di database per l'istanza di database db, deve ereditare da db.Model nel modo seguente:

class Libro(db.Model):

Come puoi vedere nell'esempio sotto, il modello Libro ha 4 attributi della classe Column. I tipi di colonna sono il primo argomento di Colonna.

class Libro(db.Model):
   id = db.Column(db.Integer, primary_key = True)
   titolo = db.Column(db.String(80), index = True, unique = True)
   nome = db.Column(db.String(50), index = True, unique = False)
   cognome = db.Column(db.String(80), index = True, unique = False)
   anno = db.Column(db.Integer, index = True, unique = False)
  • String(N), dove N è il numero massimo di caratteri.
  • Integer rappresenta un numero intero.

Column può prendere alcuni altri parametri:

  • unique: quando è True, i valori nella colonna devono essere unici.
  • index: quando è True, la colonna è ricercabile per i suoi valori.
  • primary_key: quando è True, la colonna funge da chiave primaria