¿Alguien sabe qué es lo equivalente a la cláusula SQL "INSERTAR O REEMPLAZAR" en SQLAlchemy y su lenguaje de expresión SQL?SQLAlchemy - INSERT O REPLACE equivalente
Muchas gracias - honzas
¿Alguien sabe qué es lo equivalente a la cláusula SQL "INSERTAR O REEMPLAZAR" en SQLAlchemy y su lenguaje de expresión SQL?SQLAlchemy - INSERT O REPLACE equivalente
Muchas gracias - honzas
No creo (corríjanme si me equivoco) es insertar o sustituir en cualquiera de los estándares SQL; es algo específico 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, intente: un inserto, excepto IntegrityError: luego revertir y hacer una actualización en su lugar. Una tercera solución es escribir su INSERT con una cláusula OUTER JOIN y WHERE que filtre las filas con nulos.
Session.save_or_update(model)
¿Qué hay de 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 actualmente asociada con la sesión, se cargará. Devuelve la instancia persistente. Si la instancia determinada no se ha guardado, guarde una copia y devuélvala como una instancia nueva 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
Puede utilizar OR REPLACE
como una llamada prefix
en su SQLAlchemy Insert
- la documentación de cómo colocar OR REPLACE
entre INSERT
y INTO
en la instrucción SQL es here
Esto es similar a [esta respuesta] (http://stackoverflow.com/questions/2218304/sqlalchemy-insert-ignore/2224729#2224729). –
Esta no es mi caso. No uso la sesión, estoy usando Connection directamente, por lo que debe hacerse usando el lenguaje de expresiones SQL y conn.execute (...) – honzas
De todos modos, esto es 0.4 SQLA específico, para 0.5 debes usar Session.add (modelo) – Jiri