[Python] Python e ms access

simozack simozack a yahoo.it
Gio 16 Apr 2009 15:55:25 CEST


Il 16/04/09, giorgio<g.climb a tiscali.it> ha scritto:
> Ciao a tutti,
>
>
> devo leggere e creare una tabella in un db esistente di  ms access.
>
> Per leggere i dati:
>
>  s = odbc.odbc('dbodbc')        # mi collego al DSN
>  cur = s.cursor()
>
> cur.execute("select STORICO.COD_ANAG,STORICO.DAT_STOR,STORICO.COD_CAU1,\
>                      STORICO.THM_ORA_1,STORICO.COD_CAU2,\
>                      STORICO.THM_ORA_2,ANAG.DES_ANAG\
>                      from STORICO inner join ANAG on STORICO.COD_ANAG=ANAG.COD_ANAG\
>                      where STORICO.DAT_STOR >=  ? and STORICO.DAT_STOR <= ?\
>                      order by STORICO.COD_ANAG,STORICO.DAT_STOR",\
>                      (self.dtx_reg_ini,self.dtx_reg_fin,))
>  rec = cur.fetchall()
>
>
> recuperati i dati devo creare e popolare una tabella, sempre in ms access:
>
>
>
>  #se esiste distrugge la tabella
>  try:
>         cur.execute("DROP TABLE stm")
>  except:
>         print "La tabella stm non esiste!"
>  #crea tabelle stm
>   cur.execute("CREATE TABLE stm (\
>                           id int(2) NOT NULL auto_increment,\
>                           cod char(10)  value '',\
>                           dattim char(8)  value '',\
>                           causa char(4) value '',\
>                           ore char(4) value ' ',\
>                           causaex char(4)  value '',\
>                           oreex char(4)  value '',\
>                           nome char(30)  value '',\
>                           PRIMARY KEY (id),\
>                           )")
>
>
> quì cominciano i problemi:
>
> 1- non distrugge la tabella stm, infatti esegue l'istruzione except
> 2-lo script si arresta con il seguente errore:
>   Traceback (most recent call last):
>   File "C:\Python24\Lib\site-packages\WCronos.py", line 171, in OnOkButton
>    cur.execute("CREATE TABLE stm (\
>   dbi.program-error: [Microsoft][Driver ODBC Microsoft Access] Errore di sintassi nell'istruzione
>   CREATE TABLE. in EXEC
>
>
> Qualcuno conosce la sintassi giusta per i comandi DROP e CREATE per i driver ODBC per msaccess?

La sintassi è la stessa. Qui il problema sta in come è impostata la
stringa in Python, visto che la \ non la devi mettere (infatti
l'errore sta in quello, se guardi bene).

Prova a rompere le righe così:

cur.execute("CREATE TABLE stm ( "
                          "id int(2) NOT NULL auto_increment, "
                          "cod char(10)  value '', "
                          "dattim char(8)  value '', "
                          "causa char(4) value '', "
                          "ore char(4) value ' ', "
                          "causaex char(4)  value '', "
                          "oreex char(4)  value '', "
                          "nome char(30)  value '', "
                          "PRIMARY KEY (id), "
                          ")")

Oppure con i triplici ":

cur.execute("""CREATE TABLE stm (
                          id int(2) NOT NULL auto_increment,
                          cod char(10)  value '',
                          dattim char(8)  value '',
                          causa char(4) value '',
                          ore char(4) value ' ',
                          causaex char(4)  value '',
                          oreex char(4)  value '',
                          nome char(30)  value '',
                          PRIMARY KEY (id),
                          )""")

HTH,
Simone


Maggiori informazioni sulla lista Python