SQLAlchemy – INSERTAR O SUSTITUIR equivalente

¿Alguien sabe cuál es el equivalente a la cláusula “INSERTAR O REEMPLAZAR” de SQL en SQLAlchemy y su lenguaje de expresión SQL?

Muchas gracias – honzas

No creo (corríjame si me equivoco) INSERTAR O REEMPLAZAR está en cualquiera de los estándares SQL; Es una cosa específica de SQLite. Hay MERGE, pero eso tampoco es compatible con todos los dialectos. Por lo tanto, no está disponible en el dialecto general de SQLAlchemy.

La solución más limpia es usar Session, como lo sugiere M. Utku. También puede usar SAVEPOINTs para guardar, pruebe: una inserción, excepto IntegrityError: luego restaure y haga una actualización en su lugar. Una tercera solución es escribir su INSERT con un OUTER JOIN y una cláusula WHERE que se filtre en las filas con nulos.

¿Qué pasa con Session.merge ?

 Session.merge(instance, load=True, **kw) 

Copie el estado de una instancia en la instancia persistente con el mismo identificador.

Si no hay una instancia persistente asociada actualmente con la sesión, se cargará. Devuelve la instancia persistente. Si la instancia dada no está guardada, guarde una copia y devuélvala como una instancia recién persistente. La instancia dada no se asocia con la sesión. Esta operación se conecta en cascada a las instancias asociadas si la asociación se asigna con cascade = “merge”.

de http://www.sqlalchemy.org/docs/reference/orm/sessions.html

 Session.save_or_update(model) 

Puede usar OR REPLACE como un llamado prefix en su Insert SQLAlchemy – la documentación sobre cómo colocar OR REPLACE entre INSERT e INTO en su statement SQL está aquí