Python e Postgres della P.I. 2006/02 - risolto

max@mail.studiomasson.it massimo@mail.studiomasson.it
Lun 30 Gen 2006 00:10:46 CET


Per chi c'era ieri (ops! vista l'ora è già ieri l'altro...) alla seconda 
Python Inquisition del 2006, volevo avvisarvi che ho risolto il problema 
manifestatosi con Postgres.

Riassumo per altri eventuali interessati. Sabato pomeriggio ci siamo 
trovati per estendere un modulo d'interfaccia verso i dbms, che sto 
scrivendo, con l'obiettivo di aggiungere il supporto per Postgres. 
Licia, Oriano ed Alberto mi hanno aiutato a configurare Postgres, quindi 
insieme abbiamo studiato come collegarci a Postgres usando Python, 
sfruttando il modulo Python PgSQL.
Si verificavano però diversi errori nelle operazioni, apparentemente 
legati al mio codice piuttosto che alla connessione al dbms.

Oggi ho debuggato un po', ed ho trovato il busillis, nonchè una "specie" 
di soluzione.

Il problema era semplicemente questo: il modulo PgSQL tratta in modo 
particolare il .rowcount del cursore, non restituendo il numero reale di 
righe lette ma -1 (che è il valore indicato dalle specifiche DBAPI 2.0 
quando il cursor non è in grado di determinare il valore corretto. Vedi 
anche http://pypgsql.sourceforge.net/pypgsql-faq.html#id2787127 ). Una 
prima ipotesi appariva quella di "accrocchiare" una soluzione diversa 
per conoscere il numero di record letti, ma non è la via che ho percorso.

La "soluzione" (tra virgolette perchè... più che una soluzione è una 
diversa via!) è stata quella di non appoggiarmi al modulo PgSQL, ma a 
"psycopg" ( http://initd.org/projects/psycopg1 ), che si comporta nel 
modo corretto, e (onestamente, una volta cambiati i CHAR(1) in VARCHAR) 
il tutto ha come per magia funzionato come avrebbe dovuto! Il problema 
non era nel codice.

Così il busillis è stato risolto, entro la fine del week-end!
^_^

Devo dire che questi Python inquisition stanno producendo risultati 
interessanti (a parte il freddo).

Ciao e buonanotte a tutti,
Max.


Maggiori informazioni sulla lista blug