[Python] Query in PyQt

piergiorgio pancino piertoni a yahoo.it
Mer 4 Lug 2012 17:50:47 CEST



Ciao a tutti , 
ho un problema con un programmino che sto facendo che importa dei listini da un file di testo ed aggiorna alcune tabelle nel database SQLSERVER.
In pratica prima mi inserisco tutti i dati/prezzi che mi servono all'interno di un dizionario, poi faccio l'aggiornamento di una tabella che si trova nel Server e si chiama dbo.listini_art_for e fin qua non ci sono riuscito.
Se non ché mi viene in mente che vorrei aggiornare anche delle descrizioni e il codice a barre che però è contenuto in un'altra tabella...
E quindi ho agito come segue:


Il dizionario si chiama self.dict_articoli e ogni voce contiene a sua volta un piccolo dizionario con altre voci:

self.tutti_codici[codice di riferimento]={"descrizione","listino","costo","qta_imballo","sconto_1","metel","barcode"}

Ho creato tre query come segue:

self.query=QSqlQuery()  #Questa mi seleziona tutti i record del database che voglo aggiornare e con query.next li scorro ad uno a uno
self.query_inserimento=QSqlQuery() #Questa mi serve mentre scorro i record per aggiornarli
self.query_aggiornamento_dbo_articoli0=QSqlQuery() #Questa vorrei usarla con un Join per aggiornare i dati di un'altra tabella





    def aggiorna_prezzi(self,dict_articoli):
        self.dict_articoli=dict_articoli #Il mio dizionario
        sqlstring="""SELECT dbo.listini_art_for.cod_ana, dbo.listini_art_for.cod_art_ana, dbo.listini_art_for.qta_imballo, dbo.listini_art_for.listino, dbo.listini_art_for.sconto_1, dbo.listini_art_for.netto, dbo.listini_art_for.costo
                        FROM dbo.listini_art_for
                        WHERE (((dbo.listini_art_for.cod_ana)={fornitore}));""".format(fornitore=self.codice_fornitore)
        
        self.query.exec_(sqlstring) #La mia query di selezione che scorre uno ad uno i codici della mia tabella che contiene i prezzi che voglio aggiornare
        cod_ana,cod_art_ana,qta_imballo,listino,sconto_1,netto,costo =range(7) #campi della query
        
        while self.query.next():
            articolo=self.query.value(cod_art_ana)
            
            if articolo in self.dict_articoli:

                sqlstring_inserimento="UPDATE dbo.listini_art_for SET dbo.listini_art_for.listino = %f, dbo.listini_art_for.qta_imballo=%f, dbo.listini_art_for.sconto_1 = %f, dbo.listini_art_for.netto = %f, dbo.listini_art_for.costo = %f,dbo.listini_art_for.data_riferimento_prezzo = %r WHERE (dbo.listini_art_for.cod_art_ana='%s')AND(dbo.listini_art_for.cod_ana = %d);" % (self.dict_articoli[articolo]["listino"],self.dict_articoli[articolo]["qta_imballo"],self.dict_articoli[articolo]["sconto_1"],self.dict_articoli[articolo]["costo"],self.dict_articoli[articolo]["costo"],self.data_oggi,articolo,self.codice_fornitore)

                self.query_inserimento.exec_(sqlstring_inserimento) #E con questa faccio il mio update, fino a qua funziona                

                self.query_aggiornamento_dbo_articoli0=QSqlQuery()
                sqlstringdbo_art_0= """UPDATE dbo.articoli_0 INNER JOIN dbo.listini_art_for ON dbo.articoli_0.cod_art = dbo.listini_art_for.art_cod SET dbo.articoli_0.descrizione_2 = "%s" , dbo.articoli_0.barcode = "%s" WHERE (dbo.listini_art_for.cod_art_ana = "%s" ) AND (dbo.listini_art_for.cod_ana = %d );""" % (self.dict_articoli[articolo]["descrizione"],self.dict_articoli[articolo]["barcode"],articolo,self.codice_fornitore)
                
                sqlstringdbo_art_0= """UPDATE dbo.articoli_0 SET dbo.articoli_0.descrizione_2 = "%s" , dbo.articoli_0.barcode = "%s" WHERE (dbo.listini_art_for.cod_art_ana = "%s") AND (dbo.listini_art_for.cod_ana = %d );""" % (self.dict_articoli[articolo]["descrizione"],self.dict_articoli[articolo]["barcode"],articolo,self.codice_fornitore)
                
                self.query_aggiornamento_dbo_articoli0.exec_(sqlstringdbo_art_0)#Questa parte non funziona in nessun modo, nemmeno se metto come stringa select * from dbo.articoli_0)
        #self.db.commit()
        self.db.close()

Però self.query_aggiornamento_dbo_articoli0.isValid() non è mai vero, nemmeno se sostituisco una la stringa con select * from dbo.articoli_0, ho provato e riprovato, ma non funziona, non so cosa pensare... 

Riporto tutto il codice per completezza, scusate per lo spam
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120704/d9502fbc/attachment.html>


Maggiori informazioni sulla lista Python