[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