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.
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a