[Python] Problemi in scrittura DB con executemany()

Francesco Martino francesco.martino a unipd.it
Lun 6 Ott 2008 21:21:15 CEST


Salve a tutti,

chiedo aiuto perchè ho difficoltà nel creare una nuova tabella in un 
database già esistente. Come DB uso MySql, che gira in locale;
quello che voglio fare è prendere alcuni dati dal DB esistente, e creare 
una nuova tabella che immagazzini questi dati,.

Riporto il codice che ho scritto

****************************************************************************************************************
import MySQLdb

db = MySQLdb.connect(host = 'localhost', db = 'nome_db', user = 'user', 
passwd = 'password')
cur = db.cursor()

def createTable(cur):
    curs.execute('SELECT tab1.valA, tab1.valB, tab2.valC, tab2.valD\
    FROM tab1 JOIN tab2 \
    ON tab1.valE = tab2.valE\
    WHERE tab1.valA>0')
    for data in cur.fetchall():
        dataList.append(data)  
    cur.execute('CREATE TABLE tab3 (\
      valA char(50),\
      valB char(50),\
      valC char(50),\
      valD char(50))')
    print 'tabella costruita...'
    curs.executemany("INSERT INTO tab3 (valA, valB, valC, valD) \
      VALUES (%s,%s,%s,%s)", dataList)
    print 'valori inseriti'

if __name__= '__main__':
    createTable(cur)
****************************************************************************************************************


Il problema è che la tabella rimane vuota: sono create le voci, ma 
sebbene il programma termini senza errori nome_db.tab3 risulta una 
tabella con 0 righe.
Se do la medesima istruzione direttamente in MySql, la tabella creata è 
invece corretta (con circa un migliaio di righe).

Aggiungo che ho anche provato a mettere direttamente il codice CREATE 
... SELECT nello stessa istruzione con executemany(), ma anche quella mi 
da lo stesso problema.

Qualcuno sa dirmi dove sbaglio?

Grazie,
Francesco


Maggiori informazioni sulla lista Python