GenroSql: la pigrizia si fa query

Nell'ormai consolidata abitudine a cercare soluzioni che tolgano alla nostra professione i compiti più faticosi, abbiamo realizzato per Genropy un adapter sql che si facesse carico di tutti quegli aspetti di routine che presenta l'utilizzo di un database sql in un ambito gestionale. Dopo aver esaminato degli ORM come SqlAlchemy, abbiamo preso la decisione di scrivere una libreria che si adattasse al nostro stile di programmazione ed alla nostra filosofia lazy. Vogliamo presentare il nostro lavoro perché riteniamo che in un gran numero di casi la facilità e la semplicità d'uso che GenroSql consente possano aiutare anche chi non è espertissimo di python e di sql a risolvere in modo indolore la maggior parte dei compiti connessi all'uso di database.

Caratteristiche salienti:

  1. Architettura basata su un 'core' comune e adattatori specifici per i diversi database. Al momento esistono gli adapters per PostgresQL e per Sqlite. Scrivere un adapter è un compito relativamente semplice e siamo disponibili ad aiutare chi ha necessità di adapters per implementazioni sql differenti.
  2. Definizione di un modello astratto basato sulle GenroBag. Il modello può essere letto da XML, creato con chiamate python o anche essere ricavato da un database esistente. In caso di variazioni al modello GenroSql analizza il database collegato per verificare che sia compatibile e, nel caso sia necessario, può operare sul database apportando le modifiche necessarie. Allo stato attuale viene gestita l'aggiunta di schemi, di tabelle, di colonne e di indici. La modifica di colonne esistenti non è per ora supportata ma è già prevista.
  3. Possibilità di desumere dal modello astratto tutte le informazioni strutturali usando comandi python basati sulla sintassi delle GenroBag. In pratica tutti le informazioni vengono viste come dizionari annidati e possono essere consultate usando path gerarchici. Ad esempio per accedere alle colonne della table foo dello schema bar potrò usare column=model['bar.tables.foo.columns'].keys().
  4. Definizione di path di relazione per le query a partire da una table primaria. Ad esempio per avere dalla table fatture le colonne numero_fattura, data_fattura, ragione_sociale_cliente e indirizzo_cliente, le colonne da chiedere potrebbero essere: numero, data, @cliente_id.ragione_sociale, @cliente_id.indirizzo. Sarà cura di GenroSql scrivere la query creando le opportune join. I path relativi possono avere qualunque profondità e attraversare cammini di relazione sia in senso ascendente che discendente. Ad esempio per sapere i clienti che hanno acquistato un qualsiasi prodotto contenente 'menta' nella descrizione, sarà possibile usare la condizione: where @fattura_cliente_id.@riga_fattura_fattura_id.@prodotto_id.descrizione ILIKE '%menta%'.I path di relazione possono essere usati in tutte le clausole SQL.
  5. Possibilità di accedere ai dati restituiti da una query sempre attraverso i path gerarchici. Ogni volta che nel percorrere un path si attraversano relazioni, le bag annidate vengono popolate creando le opportune query. Le relazioni possono essere lazy e popolate solo nel momento in cui il dato è richiesto oppure eager nel caso si desideri avere immediatamente le colonne in relazione.
  6. Possibilità di definire metodi di tabella.
  7. Comode API per inserimento, modifica e cancellazione di dati con la gestione di trigger in python.
  8. Meccanismo di creazione di query e di selezioni. Una volta che una selezione è stata creata è possibile operare su di essa in memoria con API per la creazione di filtri, per ordinamenti, per la creazione di colonne calcolate. La selezione può poi essere restituita in varie modalità e con la paginazione desiderata. La selezione può essere 'congelata' su disco e ripresa per operazioni in momenti successivi.
  9. Creazione automatica di aggregazione dei risultati di una selezione con la generazioni di totali a più livelli.
  10. Estrema semplicità d'uso.
  11. Licenza LGPL.
  12. Nel talk saranno esaminate le varie possibilità offerte da GenroSql e saranno forniti esempi concreti di uso della libreria.

pycon2 in the track Imparare Python.


Language
IT
Duration
60 minutes