[PIPython] Costruzione e recupero dinamici

Massimo Cecconi massimo.cecconi
Gio 31 Mar 2005 19:35:43 CEST


SI GRANDE!!!!!!

Grazie mille adesso sono proprio contento e soddisfatto  :):):)

e pensare che per creare quello che avevo fatto io ci avevo impiegato 
quasi 12 ore!!! da impazzire :( ......quanto tempo sprecato sob!!

Cmq l'importante è che adesso ho imparato qualche cosa di veramente 
importante anche per il futuro, e questo grazie a te ;)

Ora però mi è nato un'altro piccolo problema che poi veramente lo avevo 
già .....

In poche parole quando effettuo una query per essere confermata sul 
database (sqlite) devo per forza fare il commit!!

Ma se faccio il commit mi da errore di rollback ed inoltre mi inserisce 
solo l'ultima query e non tutte e 20!!!

Come mi devo comportare??  come si fa per settare l'auto-commit a True????


questo è il procedimento che seguo:

Apro il db, creo il cursore, con il for creo le query e..... (azz 
proprio adesso ho notato che avevo messo l'esecuzione della singola 
query fuori dal for mannaggia a me!!)

faccio l'update su un'altra tabella che poi sarebbe un contatore

ed eseguo il commit!!

risultato: errore di rollback!!!   che ho notato mi da sempre quando ci 
sono di mezzo dei cicli perchè se le stesse query le rifaccio sull'idle 
di python allora va tutto bene!!


Grazie ancora per tutto!! ;)




Giovanni Porcari ha scritto:

> Il giorno 31/mar/05, alle 14:46, Massimo Cecconi ha scritto:
>
>> Ciao Giovanni, :)
>>
>> Allora dovrei aver capito il tuo esempio ma non credo che sia quello 
>> che serve a me ed ora ti spiego più dettagliatamente quello che devo 
>> fare:
>>
>> Ho il mio "form" che ha ben 20 righe e ciascuna di queste righe ha 
>> ben 11 elementi che nella fattispecie sono:
>>       - 1 TEXT_CTRL
>>       - 4 COMBO_BOX
>>       - 6 RADIO (in gruppi da due)
>>
>> all'inizio creo un dizionario vuoto in questo modo:
>>
>> parent.Listing = {}
>>
>> poi ad ogni termine di riga aggiungo al dizionario questo:
>>
>> parent.Listing[1] = [parent.nSLOT_SLOT_1, parent.MISSION_NAME_SLOT_1, 
>> parent.AIRCRAFT_NAME_SLOT_1, parent.AIRCRAFT_NUMBER_SLOT_1, 
>> parent.TYPE_ENTRY_SLOT_1, parent.RADIO_FRA_SI_SLOT_1, 
>> parent.RADIO_FRA_NO_SLOT_1, parent.RADIO_114B_SI_SLOT_1, 
>> parent.RADIO_114B_NO_SLOT_1, parent.RADIO_LIMA_SI_SLOT_1, 
>> parent.RADIO_LIMA_NO_SLOT_1]
>>       che in poche parole sono i nomi di tutti gli elementi creati. 
>> Alla fine dunque, avrò ben 20 elementi nel dizionario ok??
>
>
> Si. Ok. Ma non ne capisco la ragione.
> Seguimi:
> tu aggiungi a parent un attributo Listing che è un dizionario. Già 
> questo a mio avviso non è molto 'logico' perchè un dizionario si usa 
> principalmente se devi accedere con una chiave non numerica. Ma nel 
> tuo caso basterebbe una lista.
> Poi riempi il dizionario mettendo ad ogni elemento una lista di valori 
> che prelevi sempre da parent.
> Cioè ad esempio parent.MISSION_NAME_SLOT_1. Il che significa 
> implicitamente che parent ha questi nomi già come attributi. Giusto ?. 
> Secondo me creare questo dizionario non serve e ti do appuntamento 
> alla parte seguente per vederne la ragione .....
>
>>
>>
>> Quando clicco sul pulsante invio, richiamo la funzione che deve 
>> inserire i dati nel database:
>>
>> wx.EVT_BUTTON(parent, ID_BUT_CONFIRM_D, ArchiveSlotProgramDay)
>>
>> nella funzione ArchiveSlotProgramDay ho questo:
>>
>> db_BSS = sqlite.connect('CF_BSS.db')
>> BSS = db_BSS.cursor()
>>
>>
>> Slot_From = 0
>>    Slot_To = 20
>>
>>    GET_VALUE = parent.Listing
>
>
> Bene ora assegni al tuo dizionario anche il riferimento GET_VALUE.
>
>>
>>    while (Slot_From < Slot_To):
>>        Numeratore = (Slot_From + 1)
>
>
> ecco qui sarebbe più pythonoso fare:
>
>       for Numeratore in range(0,Slot_To):
>
>>
>>        ID_Autoincrement = NextNumIdSlot
>>              LIST = GET_VALUE[Numeratore]
>
>
> ecco in questo punto ritorni al tuo dizionario e ne prendi l'elemento 
> numeratore che è la lista dei valori salvata precedentemente.
>
>>
>>        N_SLOT = LIST[0].GetValue()
>
> Qui prendi del primo oggetto il valore...e via dicendo per gli altri.
>
>>        MIX_NAME = LIST[1].GetValue()
>>        JET_NAME = LIST[2].GetValue()
>>        JET_NUMBER = LIST[3].GetValue()
>>        ENTRY_SLOT = LIST[4].GetValue()
>>        FRA_SI = LIST[5].GetValue()
>>        FRA_NO = LIST[6].GetValue()
>>        B114_SI = LIST[7].GetValue()
>>        B114_NO = LIST[8].GetValue()
>>        LIMA_SI = LIST[9].GetValue()
>>        LIMA_NO = LIST[10].GetValue()
>>
>
> Ora, in realtà, senza stare nemmeno a creare il dizionario, puoi avere 
> subito il valore.
>
> for Numeratore in range(0,Slot_To):
>         MIX_NAME = 
> getattr(parent,'nSLOT_SLOT_'+str(Numeratore).GetValue()
>         JET_NAME = 
> getattr(parent,'MISSION_NAME_SLOT_'+str(Numeratore).GetValue()
>         JET_NUMBER = 
> getattr(parent,'AIRCRAFT_NAME_SLOT_'+str(Numeratore).GetValue()
>         .............
>         ..............
>         LIMA_NO = 
> getattr(parent,'RADIO_LIMA_NO_SLOT_'+str(Numeratore).GetValue()
>
> Con questo dovresti accedere tranquillamente. In pratica con la 
> getattr hai la referenza dell'oggetto wx a partire dalla riga e dal 
> nome e con GetValue ne prendi il valore.
>
> Se vuoi essere più elegante.........:
> Potresti, per eleganza, aggiungere all'oggetto una function 
> getRowNamedValue
>
> def getValueFromRow (self,row,name)
>     return getattr(self,name+str(row).GetValue()
>
> in tal modo il tuo codice diventa:
>
> for Numeratore in range(0,Slot_To):
>         MIX_NAME = parent.getValueFromRow(Numeratore,'nSLOT_SLOT_')
>         JET_NAME = 
> parent.getValueFromRow(Numeratore,'MISSION_NAME_SLOT_')
>         JET_NUMBER = 
> parent.getValueFromRow(Numeratore,'AIRCRAFT_NAME_SLOT_')
>         .............
>         ..............
>         LIMA_NO =parent.getValueFromRow(Numeratore,'RADIO_LIMA_NO_SLOT_')
>
> che è più elegante da vedere.
>
>>
>> e così recupero il valore di ognuno degli elementi che avevo nel form 
>> di partenza.
>>
>> Ora dimmi se forse (come probabile), non ho capito io il tuo esempio 
>> quindi come mi hai detto tu fa la stessa cosa e se è più performante 
>> in termine di memoria, quindi in prestazioni.
>>
>> Se invece quello che vorrei io lo posso fare solo nel modo in cui 
>> l'ho fatto già, oppure c'è un metodo migliore e più performante??
>>
>> Inoltre quando creo il form sono costretto a scrivere il codice per 
>> intero oppure c'è un modo per fare si che le varie righe le posso 
>> creare dinamicamente??  sinceramente ho incontrato problemi. Adesso 
>> poi a parte che ci impiega circa due o tre secondi nella creazione, a 
>> volte lo crea a scatti, da cosa può dipendere?? posso avere dei 
>> problemi in futuro??
>> Ciao e grazie ancora.... yuk!
>
>
> Spero ti sia di aiuto. Come consiglio personale ti conviene esporre 
> molto molto bene il problema perchè a te che scrivi è evidente ma chi 
> ti legge non avendolo vissuto, magari fatica a capire.
>
> Ciao
> G.
>
> _______________________________________________
> La mailing list di python.it
> python a lists.python.it
> http://lists.python.it/cgi-bin/mailman/listinfo/python
>
>



More information about the Python mailing list