[Gfoss] Sqlite! e Python

Alessandro Furieri a.furieri a lqt.it
Mar 10 Mar 2009 11:59:10 CET


Alessandro Frigeri ha scritto:
> hai delle novita' riguardo a spatialite e python, esempi?
>   
Ottime notizie per quelli tra di voi che sono interessati
ad usare SpatiaLite tramite Python :-)

[grazie mille ad Alessandro Frigeri che mi ha "tirato
 per la giacchetta" dandomi l'occasione di riesaminare
 il problema in un quadro più aggiornato]

=========================================================

Breve riassunto delle puntate precedenti; SpatiaLite è
implementata come una "dynamic loadable extension" di
SQLite ... purtroppo, fino a poco tempo fa, le principali
distribuzioni pacchettizzate (di Linux, di Python etc)
disabilitavano by default qualsiasi possibilità di
caricare le extensions (sicurezza paranoica ???),
e quindi usare SpatiaLite risultava impossibile oppure
assai difficoltoso.

Ora però sono inciampato del tutto casualmente su questo:
http://code.google.com/p/xenia/wiki/SpatialLite

ed ecco a seguire cosa ho verificato "concretamente":
--------------------------------------------------------
Linux [io uso Ubuntu 8.04.1 hardy heron ...]
--------------------------------------------------------

prima ho provato questa:
 > sudo apt-get install python-pysqlite2

installa correttamente, ma non supporta le dyn-extensions;
evidentemente è una versione obsoleta ...

allora ho scaricato i sources dell'ultima versione pysqlite2:
https://launchpad.net/ubuntu/jaunty/+source/python-pysqlite2/2.5.0-2ubuntu1/+files/python-pysqlite2_2.5.0.orig.tar.gz

quindi ho fatto la build ed ho installato (pochi secondi ...):
 > python setup.py build
 > sudo python setup.py install

infine ho buttato giù tre righe stupide-stupide giusto
per fare un test di accesso ...

test.py:
-------------
from pysqlite2 import dbapi2 as sqlite
DB = sqlite.connect('./test-2.3.sqlite');
DB.enable_load_extension(True);
DB.execute('SELECT load_extension("libspatialite.so")');
DBCursor = DB.cursor()
strSQL = 'SELECT Name, GeometryType(geometry), area(geometry) ';
strSQL += 'FROM regions ORDER BY Area(geometry) DESC';
DBCursor.execute( strSQL );
for row in DBCursor:
        print( row[0] + ' ' + row[1] + ' ' + str(row[2])
DBCursor.close();
DB.close();
---------------

 > python test.py
------------------
SICILIA MULTIPOLYGON 26074081211.3
PIEMONTE MULTIPOLYGON 25391974998.1
SARDEGNA MULTIPOLYGON 24125601024.3
LOMBARDIA MULTIPOLYGON 24069782849.5
TOSCANA MULTIPOLYGON 22971611856.6
EMILIA-ROMAGNA MULTIPOLYGON 22112626674.3
PUGLIA MULTIPOLYGON 19535533607.9
VENETO MULTIPOLYGON 18091146695.8
LAZIO MULTIPOLYGON 17075567463.4
CALABRIA MULTIPOLYGON 15357477642.6
CAMPANIA MULTIPOLYGON 13671884537.6
TRENTINO-ALTO ADIGE MULTIPOLYGON 13636192197.0
ABRUZZI MULTIPOLYGON 10921890033.0
BASILICATA MULTIPOLYGON 10082620411.6
MARCHE MULTIPOLYGON 9801006025.43
UMBRIA MULTIPOLYGON 8511757763.65
FRIULI-VENEZIA GIULIA MULTIPOLYGON 7571067911.64
LIGURIA MULTIPOLYGON 5451586208.43
MOLISE MULTIPOLYGON 4534700124.13
VALLE D'AOSTA MULTIPOLYGON 3309252833.27
SAN MARINO MULTIPOLYGON 60108921.7828
------------------

FUNZIONA; alla grande ... sbizzaritevi pure

ciao Sandro



Maggiori informazioni sulla lista Gfoss