[PIPython] Costruzione e recupero dinamici

Massimo Cecconi massimo.cecconi
Gio 31 Mar 2005 19:54:10 CEST


okok!!

Ho risolto ed ho capito come settare l'autocommit!!

grazie ancora per tutto e buon proseguimento :)

Ci risentiamo al mio prossimo problema...........(fra due minuti 
:):):):)   )

Massimo Cecconi ha scritto:

> 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
>>
>>
>
> _______________________________________________
> 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