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

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


Manlio Perillo ha scritto:
[...]

>> ed a quel punto avere in "oggetto" i dati corrispondenti a quella pk 
>> nel dbms (se esistente).
> 
> Ma per fare questo non vedo perchè complicarsi la vita.

Hemm... "sposo" questa filosofia. Ma tu come faresti per non complicarti 
la vita in questo caso?

[...]

> Tieni conto che con SQLAlchemy non puoi modificare le primary key di un 
> oggetto, tramite l'ORM.
> 
> Questo è un limite noto, c'è qualche discussione negli archivi della 
> mailing list.

Ok, mi sta anche bene... infatti se l'ipotetico utente mi inserisse in 
pk dei valori già presenti io vorrei appunto caricare l'oggetto, e 
lasciargli poi modificare i campi non-pk, quindi consentirgli l'update. 
Questo era più o meno il senso...

[...]

> Non sono proprio sicuro di capire la logica del tutto.
> Quando vuoi salvare un oggetto, lo crei e quindi fai sess.save(obj) .

Ok. Tutto bene se il nuovo oggetto non ha equivalente nel dbms, ma se 
esiste un equivalente record l'ORM mi solleva eccezione e non riesco a 
fare l'update.

> Se lo vuoi caricare fai sess.load(pk)

Mi va bene facendo:
oggetto = session.load(pk)

ma io volevo preparare un comportamento quale:
oggetto.load(pk)

> In genere le operazioni "crea nuovo" e "modifica esistente" sono ben 
> separate, ma sembra esserci diversa gente per cui non è così (tanto che 
> MySQL ha un INSERT OR UPDATE).

Secondo me dipende molto da cosa vuoi lasciar fare all'utente finale. 
L'obiettivo che vorrei raggiungere io è lasciargli creare un nuovo 
oggetto. Poi inserisce i valori che vuole. Quando completa la pk il 
framework gli dice: occhio che già c'è questo oggetto. Se vuoi lo carico 
così puoi modificarlo. In alternativa, cambia alcuni campi (quelli che 
compongono la pk, così da prepararne una nuova).

Non so se sono riuscito a far comprendere la logica applicativa che ho 
in mente...

[...]

> Se cambi la primary key, questo è normale.
> Ma, di solito, la primary key non dovrebbe essere modificata;

Ok, mi sta bene. In effetti quel che vorrei è caricare dal dbms 
l'oggetto con quella specifica primary key, e poi _eventualmente_ 
modificare gli altri campi...

[...]

> Come controlli che i dati siano davvero aggiornati?

Cosa intendi? Se sono modificati nel dbms? Vado a vedere nella tabella...

> In questo momento sto avendo un problema analogo anche io, ma è 
> sess.query che sembra non mi riporti lo stato aggiornato (mi è successo 
> anche tempo fa ed avevo risolto).

?

[...]

> Un'altra soluzione è usare il pattern proxy.
> 
> class Proxy(object):
>    def __init__(self, obj):
>       self.obj = obj
> 
>    ...__setattr__/__getattr__
> 
> In questo caso ti basta modificare self.obj.

Interessante, ci medito su!

[...]

>> 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?
> 
> Sembra proprio di no.

:(

Perché mai non usano il buon vecchio mailman, mi chiedo io...

Grazie di nuovo e ciao,
Max.


Maggiori informazioni sulla lista Python