[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