Borrar registros en Diesel con filtros

Resumen

Eliminar registros en una base de datos es la última operación del CRUD que te falta dominar, y con Diesel ORM en Rust resulta sorprendentemente directo. Aquí aprenderás cómo borrar uno o varios posts usando filtros por id, por slug y hasta con patrones de búsqueda parciales, todo pensado para quienes ya manejan creación, lectura y actualización de datos.

Cómo elimino un registro específico con Diesel

Cuando un registro ya no te sirve, puedes borrarlo con una sola línea encadenada. La función central es diesel::delete, que recibe la tabla filtrada por la condición que tú definas.

Para eliminar el tercer post del ejemplo, el flujo se ve así:

  • Llamas a diesel::delete sobre posts.filter(...).
  • Aplicas un filtro, por ejemplo slug.eq("tercer-post").
  • Ejecutas con .execute(connection).
  • Manejas el error con un mensaje tipo ha fallado la eliminación del tercer post.

Fíjate en un detalle que aparece en la práctica: el nombre de la tabla es posts, en plural. Un typo tan pequeño como escribir post en singular rompe la consulta, así que revisa siempre el esquema generado por Diesel.

¿Qué hace diesel::delete en Rust? Construye una sentencia SQL DELETE a partir de una tabla y un filtro encadenado. Solo se ejecuta cuando llamas a .execute() pasándole la conexión.

Por qué puedo filtrar por slug y no solo por id

El id suele ser el filtro más común, pero Diesel te deja usar cualquier columna indexable. El slug funciona igual de bien porque es único y legible, lo que ayuda cuando estás depurando en consola y quieres saber exactamente qué registro estás tocando.

La mecánica es la misma: cambias id.eq(...) por slug.eq("tercer-post") y el resto del encadenamiento se mantiene intacto.

Cómo borro varios registros a la vez con un patrón

Eliminar uno por uno no escala. Si necesitas barrer un grupo de filas que comparten algo en su contenido, Diesel te ofrece like, el mismo operador que ya conoces de SQL.

En lugar de slug.eq(...), usas slug.like("%post%") y el patrón hace el trabajo. En el ejemplo, todos los registros tenían la palabra post en su slug, así que la operación dejó la tabla vacía. Es una demostración clara de lo poderoso (y peligroso) que puede ser un filtro mal acotado.

¿Cuándo uso like en vez de eq? Usas like cuando buscas coincidencias parciales con comodines como %. Usas eq cuando necesitas una igualdad exacta contra un valor concreto.

Qué riesgos tiene un delete con like demasiado abierto

Un patrón como %post% parece inofensivo hasta que descubres que coincide con todo. Antes de ejecutar un delete masivo conviene que:

  • Corras primero un select con el mismo filtro para ver qué vas a borrar.
  • Confirmes que el patrón no incluya prefijos o sufijos comunes.
  • Tengas un respaldo o un seed para repoblar la tabla si te equivocas.

Esta última recomendación no es teórica. En el ejemplo, después de borrar todo tocó repoblar manualmente, y por eso vale la pena tener scripts de inserción listos desde el inicio del proyecto.

Qué sigue después de cerrar el módulo de ORM

Con delete cierras el ciclo CRUD completo en Diesel: crear, leer, actualizar y eliminar. Ya tienes las cuatro operaciones que sostienen cualquier aplicación que hable con una base de datos relacional desde Rust.

Antes de avanzar, hay un reto pendiente: repoblar la tabla posts con los registros que acabas de borrar, porque vas a necesitarlos para conectar tu base de datos con un framework web. El siguiente paso es Actix Web, donde tu ORM dejará de vivir solo en la consola y empezará a responder peticiones HTTP reales.

¿Ya tienes listo tu seed para repoblar la tabla? Cuéntame en los comentarios cómo organizas tus inserciones iniciales.