[Python] Mutazione di un oggetto dall'interno...

Massimo massimo a mail.studiomasson.it
Ven 23 Feb 2007 18:14:34 CET


Manlio Perillo ha scritto:
[...]

> In linea di massima quello che vuoi fare non mi sembra il modo migliore 
> di procedere.
> 
> Perchè ti serve una cosa del genere?

Sto costruendo un "coso" per arrivare a fare cose tipo:

workspace = #inizializzazioni varie di dbms, session, etc.

oggetto = qualcosa(workspace)

oggetto.pk1=chiave1
oggetto.pk2=chiave2
oggetto.read()

ed a quel punto avere in "oggetto" i dati corrispondenti a quella pk nel 
dbms (se esistente).

(In realtà il problema originale è che non riesco a fare l'update di un 
oggetto con SQLAlchemy, a meno che non sia caricato da session.query() e 
poi modificato).

L'idea era di fare un oggetto nuovo, in ogni caso. Poi quando vengono 
inseriti i vari valori (controllo ridefinendo __setattr__) verifico se 
la chiave primaria sia completa, ed a quel punto tento di leggere il 
corrispondente oggetto dal dbms. Se non c'è non faccio nulla (l'oggetto 
è nuovo, e quindi quello già istanziato mi va bene com'è) ma se esiste 
invece di lavorare su un "nuovo" vorrei caricare i dati di quello 
esistente e, di li in avanti, casomai, modificarli fino al successivo 
.flush() (che in questo caso farà un update e non un insert).

Ma non ne sto venendo fuori, non riesco a fare l'update ma solo 
l'inserimento di nuovi oggetti.

[...]

> In teoria quindi bastarebbe fare
> self.__dict__.update(tmp.__dict__)

Si, giusto. Io avevo fatto stupidamente self.__dict__ = tmp.__dict__ 
scoprendo che non era la via giusta.
Usando .__dict__.update() ho in effetti i dati che mi servono. Dovrei 
verificare però con oggetti complessi, con relazioni, come si 
comporterebbe...
In ogni caso anche adesso il tentativo di .save_or_update() e .flush() 
non mi modifica i dati su disco... :(

> Ma non tutto lo stato si trova nel dizionario, ci sono anche le property.
> Così su due piedi non so dirti come fare a copiare tutto.

Già...

[...]
>> p.s. ho provato ad iscrivermi alla ml di SQLAlchemy, gestita da 
>> google, e ricevo i messaggi ma non riesco a spedirne. Qualcuno l'ha 
>> mai usata e mi può gentilmente suggerire "le basi"? Grazie ancora...
> 
> Google non ti manda i messaggi che tu hai spedito, come succede in 
> questa mailing list, ad esempio.
> Hai provavo a vedere dall'interfaccia web?

No, il problema è proprio che mi ritornano indietro i messaggi che 
spedisco. Ma ho usato il mio account, non uno di google... si potrà fare 
lostesso, io penso, no?

Grazie e ciao,
Max.


Maggiori informazioni sulla lista Python