30 agosto 2015

Leggere e scrivere un databse .accdb senza Access con Libreoffice

Come riportato qui :

'limited olders driver "Microsoft.Jet.OLEDB.4.0" works fine for read/write, while "Microsoft.ACE.OLEDB.12.0" driver only reads; (fdo#43187). Driver only works on Windows.'

Libreoffice non è pienamente compatibile con le ultime versioni di MS Access, già a partire dalla 2010.
Come fare per accedere (in read/write) a preesistenti file nel formato .accdb, senza per forza acquistare la suite di redmond oppure, in ambienti non-Windows, senza eseguirla con wine o VirtualBox?

Ci viene in aiuto UCanAccess (http://ucanaccess.sourceforge.net/site.html), un'implementazione open source del Driver JDBC che permette ai client jdbc (per esempio, DBeaver, NetBeans, SQLeo, Open Office Base, Libre Office Base, Squirrell) di accedere in lettura e scrittura ai database MS Access (.mdb and .accdb).
Essendo scritta interamente in Java, gira su Windows e su sistemi non-Windows (linux), senza la necessita di driver ODBC, grazie all'impiego di:

  • Jackcess coem libreria per accedere a Ms Access (http://jackcess.sourceforge.net/).
  • Hsqldb come  synchronized DBMS (http://hsqldb.org/).
  
L'elenco completo delle feature può essere trovato nell'home page del progetto, assieme al pacchetto con gli eseguibili, giunto alla versione 3.0.0.


Oltre al classico uso del terminale a riga di comando (per i puristi), attraverso l'esecuzione di script da shell (inclusi nel paccheto compresso e che prevedono la possibilità di eseguire comandi SQL e l'esportabilità in formato CVS dei dati), esiste l'opportunità di integrazione con Libreoffice(LO), secondo le modalità di seguito esposte.

Una volta scaricato e decompresso il pacchetto in un percorso opportuno, apriamo LO e consideriamo la scheda "Avanzate" nel menu Opzioni, dalla quale possiamo accedere alla finestra "Percorso classi", premendo il relativo pulsante.

 Si tratta allora di aggiungere gli archivi (in formato .jar) contenuto nel percorso di decompressione ed elencati di seguito:

//ucanaccess-3.0.0.jar
//lib/commons-lang-2.6.jar
//lib/commons-logging-1.1.1.jar
//lib/hsqldb.jar
//lib/jackcess-2.1.2.jar






Quindi chiudiamo LO e riapriamolo, iniziando la procedura di creazione di un nuovo DB, scegliendo l'opzione "Connect to an existing database (JDBC)"

Supponendo che il file MSAccess che voglio manipolare sia "TOL.accdb"  nle percorso, /home/bleish/Scrivania/TOL.accdb, devo completare i campi mostrati nella finestra nel modo seguente (notare la tripla slash):

  • URL della sorgente dati-->   jdbc:ucanaccess:///home/bleish/Scrivania/TOL.accdb
  • Classi di driver JDBC --> net.ucanaccess.jdbc.UcanaccessDriver

Fatto questo posso passare avanti e salvare il database creato in una cartella desiderata.

Da questo momento è possibile aprire il file e manipolare, attraverso JDBC, il file .accdb di Access.
Tuttavia, l'accesso in modalità read/write è solo consentito alle tabellee alle view, e non è possibile gestire form e codice VB; inoltre molte delle tipiche operazioni sulle tabelle non sono consentite.

17 agosto 2015

Django e le migrazioni


Nelle precedenti versioni, Django offriva un sistema di aggiornamento dei modelli e di conseguente sincronizzazione con il relativo schema nel database piuttosto antiquato, permettendo solo di aggiungere nuovi modelli al database, senza modifiche in itinere: non era possibile modificare o rimuovere i modelli esistenti attraverso il comando

syncdb

Aggiornare un'applicazione in modo che rifletta le modifiche apportate al modello diventava qualcosa di laborioso (esistono tuttavia dei tool come South, oppure Django Evolution.

Dalla versione 1.7, sono state introdotte le migrazioni, ovvero l'automatismo attraverso il quale è possibile applicare i cambiamenti del modello (aggiunta di campi, ...) allo schema del database.

Sostanzialmente, si tratta di una procedura molto semplice che possiamo schematizzare nel modo seguente:
  • applicare i cambiamenti al modello;
  • eseguire il comando

    python manage.py makemigrations
  • eseguire il comando

    python manage.py migrate 

Il primo comando, makemigrations, è responsabile della creazione di una nuova migrazione basata sui cambiamenti fatti sul modello; migrate, invece, applica la migrazione, oppure elenca gli eventuali motivi ostativi.
A questi comandi si aggiunge sqlmigrate, che permette di mostrare le istruzioni SQL che verranno eseguite per applicare la migrazione.

Le migrazioni si possono pensare come un sistema di controllo della versione per lo schema del database: makemigrations opera una scansione del modello modificato e un confronto con le versioni precedenti conservate nei files di migrazioni, producendo un impacchettamento dei cambiamenti del modello in un nuovo file di migrazione; migrate, infine, si occupa di applicare i cambiamenti allo schema.

I file di migrazione vengono conservati nella directory
my_app/migrations.

11 agosto 2015

Django, installazione ed estensioni necessarie

"Django makes it easier to build better Web apps more quickly and with less code."
Come recita la pagina principale del progetto Django, è un web framework open source per lo sviluppo di applicazioni web, scritto in Python e sviluppato dalla "Django Software Foundation" (DSF), un'organizzazione indipendente senza scopo di lucro. Stando a wikipedia, utilizzano questo framework Pinterest, Instagram, Mozilla, The Washington Times et al.
Citando la descrizione degli sviluppatori, mostrata in alto, aggiungerei che, non solo è più facile, ma anche più divertente e naturale.

L'installazione si svolge seguendo semplicidue principali alternative:
  • utilizzando, con i privilegi di roor, il package manager pip: (eventualmente da installare nel sistema con sudo apt-get install python-pip ):

    pip install django

    oppure per versione specifica:

    pip install Django==1.8.3
  • manualmente scompattando il pacchetto scaricato dalla pagina di download ed eseguendo, all'interno della cartella radice, il comando:

    sudo python setup.py install
In entrambi i casi si può verificare la versione installato con:

python -c "import django; print(django.get_version())"

Può essere utile aggiornare una precedente installazione; di questo si occupa automaticamente il comando

pip install -U django

che provvede a  disinstallare completamente la precedente versione e installare la nuova.

Un gruppo di estensioni interessanti si installa con il comando

pip install django-extensions

delle quali parleremo più diffusamente in seguito.

Utilizzando pip è anche possibile procedere alla disinstallazione con il comando

sudo pip uninstall django

Analogamente è possibile interrogare pip per sapere quali estensioni di django sono installate:

sudo pip freeze | grep -i django

Ulteriori informazioni possono essere reperite nella guida di installazione.