[Python] SQLAlchemy: insert o update

max a mail.studiomasson.it massimo a mail.studiomasson.it
Mar 13 Feb 2007 00:01:31 CET


Scusate se faccio una domanda banale.
Usando l'orm di sqlalchemy qualcuno mi saprebbe dare un suggerimento su 
come risolvere il problema di fargli fare automaticamente un inserimento 
o un aggiornamento? Mi spiego meglio:

Creo tabelle e oggetti, legati dal "mapper". Ho la mia brava sessione.
Se creo un nuovo oggetto, poi lo salvo (una cosa tipo session.save(obj)) 
e poi faccio il .flush() va tutto bene se il nuovo oggetto non è 
presente nel dbms (ovvero ho messo una pk realmente nuova) mentre se la 
pk è già esistente mi segnala un conflitto (giusto, in quel caso dovrei 
chiedere un update e non un insert).
Ovviamente se leggo un oggetto (già esistente) tramite query, lo 
modifico e faccio il .flush() ottengo correttamente un update.

La domanda è semplice: esiste un modo per non dover prestabilire se si 
sta lavorando su un oggetto nuovo piuttosto che su uno esistente? Mi 
andrebbe bene una cosa tipo: se la pk non esiste esegui INSERT, 
altrimenti UPDATE. Se gli oggetti sono nuovi e non caricati da query mi 
propone sempre e solo insert...

Grazie in anticipo dei suggerimenti,
Massimo.


Maggiori informazioni sulla lista Python