[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