[Python] SQLAlchemy: insert o update

max a mail.studiomasson.it massimo a mail.studiomasson.it
Mar 13 Feb 2007 15:18:19 CET


Marco Mariani ha scritto:
[...]

> Se la pk non esiste?
> Non ti capita mai di inserire una riga... conoscendo prima la chiave
> primaria?

Non so se ho capito bene la domanda... se la pk non esiste si tratta di 
un insert, ovviamente. Che è la situazione "standard" che ho istanziando 
un nuovo oggetto, associandolo alla sessione con session.save(obj) e poi 
scrivendolo nel dbms con .flush().

Il mio problema è che se creo un nuovo oggetto e poi inserisco valori di 
pk corrispondenti ad un record già esistente non ho trovato nessun modo 
per fare l'update su disco (con .flush()), mi fa sempre solo insert e 
quindi ho un'eccezione...

> Lo chiedo perche' a me succede sempre.

Non ho capito bene cosa intendi...

> Forse questo ti puo' essere utile
> 
> http://www.sqlalchemy.org/docs/unitofwork.myt
> 
> 
>       save_or_update()

Ti ringrazio della segnalazione, avevo già guardato sia update che 
save_or_update ma fanno una cosa un po' diversa. In pratica, se non ho 
capito erroneamente (ma i risultati confermano la descrizione che sto 
per fare...) save dice alla sessione di tracciare un certo oggetto. 
Update dice alla sessione di "riprendere in carico" un oggetto che era 
stato "lasciato" (traduzione impropria di "transient" or "detached", 
senza sessione insomma...). Il problema mio è successivo, perchè è in 
fase di .flush() che non distingue tra insert o update (intendo a 
livello sql, a questo punto).

Ho ben presente che ci sono in caso di update una serie di problemi di 
conflitto e gestione dei lock, ma io vorrei semplicemente poter 
"forzare" un update...

Tu riesci a fare un oggetto nuovo, agganciarlo alla sessione (con 
.save() o con save_or_update() come vuoi...) e scriverlo su disco con 
.flush() indipendentemente dal fatto la sua pk esista o meno nei record 
del dbms?

Grazie,
Max.


Maggiori informazioni sulla lista Python