[Python] Python e ms access

Daniele Varrazzo piro a develer.com
Gio 23 Apr 2009 13:17:36 CEST


On Thu, 23 Apr 2009 11:18:06 +0200, giorgio <g.climb a tiscali.it> wrote:

> Traceback (most recent call last):
>   File "D:\Python24\WCronos.py", line 172, in OnOkButton
>     cur.execute("CREATE TABLE stm (id INT(2),cod TEXT(10),dattim
TEXT(8))")
> dbi.program-error: [Microsoft][Driver ODBC Microsoft Access] Errore di
> sintassi nell'istruzione CREATE TABLE. in EXEC
> 
> risultato  sempre deprimente..........

Ma come vedi è un errore diverso dal precedente, che era:

 Traceback (most recent call last):
  File "D:\Python24\WCronos.py", line 172, in OnOkButton
  cur.execute["CREATE TABLE stm (id INT(2),cod TEXT(10),dattim TEXT(8))"]
  TypeError: unsubscriptable object

il primo errore era un errore in python: hai provato ad applicare il
subscript (l'operatore []) ad un oggetto che non lo prevede (ad una
funzione, "cur.execute").

Ora hai un errore diverso: il tuo comando ha trasmesso correttamente la
stringa della query dal python al driver odbc... e qualcosa non ha
funzionato lì dentro.

Il problema che hai è che odbc non ti dice dove sia l'errore:
probabilmente perché access non è pensato per essere usato in sql ma solo
dalla sua interfaccia, i messaggi di errore che genera non sono molto
indicativi.

Siccome troverai difficile documentarti su questa sintassi, ti suggerisco
di mollare access ed usare sqlite (http://sqlite.org/), che è un altro
database embedded (ovvero non hai bisogno di un server: consiste in una
libreria e il db viene salvato in un file, esattamente come access/jet o
come si chiamava). Il vantaggio che avresti è probabilmente in una
documentazione migliore e messaggi di errori più esplicativi.

SQLite è già incluso in python 2.5 e successivi
(http://docs.python.org/library/sqlite3.html) ed è multipiattaforma.

NB: access non è malaccio come database personale, e mi ha sempre risposto
bene anche con utilizzi pesanti, quindi non vedere il messaggio come
"M$-cacca-male-assoluto". Ma scrivere la definizione di un database
direttamente in sql non è il caso di uso tipico di access e ti scontrerai
regolarmente con messaggi di errore difficili da interpretare: il mio
consiglio di passare a SQLite verte soprattutto su questo.

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python