Patró gestió connexions a base de dades

Ja he parlat alguna altra vegada de SQLAlchemy.

Com sabreu els que us hi heu dedicat alguna vegada, la gestió de les connexions a les bases de dades és un punt crític a les aplicacions amb diversos usuaris simultanis. Bé, és extensible a qualssevol recursos escassos.

Una solució que proposen (i deixen ben clar que no és l’única) és la següent:

from contextlib import contextmanager

sessions = sessionmaker (...) 

@contextmanager
def entorn_sessio ():
    sessio = sessions()
    try:
        yield sessio
        sessio.commit()
    except:
        sessio.rollback()
        raise
    finally:
        sessio.close() 

def fer_feina():
    # En acabar-se el WITH el bloc torna a entorn_sessio, just després del YIELD. 
    # Farà el commit
    # Si hi ha un error rebrem l'excepció
    # En tot cas allibera la connexió a la base de dades

    try:
        with entorn_sessio() as una_sessio:
            # El que hi ha dins del WITH pot fer l'accés a base de dades

            llibre_nou = Llibre(autor="Pierre Lemaître", titol="Couleurs de l'incendie")
            una_sessio.add (llibre_nou)

    except:
        # Tractar els errors des del punt de vista funcional, sense amoïnar-se per la connexió a la base de dades

    # I aquí seguim fent coses que no necessiten base de dades
    fer_mes_feina_sense_base_dades ()

L’he trobat molt elegant i a més m’agrada perquè:

  • Queda clar en quin bloc es fa accés a base de dades (el que és dins del with). Això convida a fer-lo curt i, si no ho és, a repensar-ho una mica.
  • Fa una gestió global del recurs (l’accés a base de dades) de forma bastant còmoda, que em sembla fàcil d’estandarditzar en tota una aplicació o en un equip de treball.
  • En cap cas es queden connexions obertes (si se segueix el patró a tot arreu, és clar).
  • M’ha permès aprofundir en el yield (no l’havia fet servir mai, encara… i és que m’agrada el Python, però vaig aprendre a programar amb BASIC i Pascal, que són molt tradicionals).

L’he començat a fer servir per una aplicació d’ús personal, amb una variant: un “entorn_sessio” per a actualitzacions (com el que hi ha a l’exemple de dalt) i un altre només per consultes, que incondicionalment fa un rollback() al final.

Si bé aquest mètode em sembla bo, no hi ha solució universal a aquests problemes. I gairebé és tan important assegurar-se que dins d’una aplicació es fa a tot arreu de la mateixa manera com la correcció de la solució per ella mateixa.

22/3/2019: Exemple retocat.

Pierre Lemaître: Couleurs de l’incendie

Pierre Lemaître: Couleurs de l’incendie
Albin Michel, 2018
ISBN 978-2-226-42688-8
Valoració: 3

El funeral de Marcel Péricourt, un banquer parisenc, mobilitza les més altes autoritats i la burgesia francesa. I s’hi esdevé un tràgic accident: el nét del difunt, Paul, cau (o es llença?) per una finestra, fet que el deixa paralític de cintura en avall.

El testament designa com a hereva Madeleine, la filla del difunt, mare del Paul. De fet ja la coneixem de refiló, és l’ex-dona d’Henry d’Aulnay-Pradelle (que segueix a la presó), i germana d’Édouard, dos dels protagonistes de Au revoir là-haut. I dos homes queden decebuts: Charles Péricourt, germà del difunt i polític més aviat mediocre, que sense els diners de Marcel no hauria pas arribat a diputat; i Gustave Joubert, el fidel administrador de la banca i temps enrere promès amb Madeleine, que esperava alguna cosa més que un agraïment simbòlic després d’anys de servei.

I amb aquests ingredients i mitja dotzena més de personatges Pierre Lemaître desenvolupa una trama d’aliances i venjances. Amb, és clar, algun gir sobtat de trames argumentals i evolució del caràcter dels personatges al llarg dels anys, entre les dues guerres mundials, amb el rerefons històric del naixement del nazisme a Alemanya.

Una mica menys d’èpica que al primer llibre de la trilogia, si bé amb personatges (potser) més elaborats, menys primaris. Val a dir, però, que fa quatre anys del primer llibre, i alguns detalls no els recordo.

Llegit en format electrònic; en català la publicarà Bromera, amb el títol “Colors de l’incendi”; estarà disponible el març del 2019, pel que llegeixo a “L’illa dels libres“.

blog personal de Gabriel Massip