[Gfoss] Sqlite! e Python

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 :slight_smile:

[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

On Tue, Mar 10, 2009 at 11:59:10AM +0100, Alessandro Furieri wrote:

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 ???),

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=475084

Il meccanismo salvo bug e' in-place dall'anno scorso, quindi
assolutamente operativo per lenny, se non c'e' evidenza
del contrario.

--
Francesco P. Lovergine