PIXEL FACEBOOK
[google-translator]

Interactuar con bases de datos en Rust usando Diesel vs SQLx

Lo que vas a encontrar...

En este tutorial, exploraremos dos bibliotecas utilizadas al interactuar con bases de datos relacionales en Rust: Diesel y SQLx.

Este artículo utilizará una base de datos de clase simple con estudiantes para demostrar cada enfoque. Realizaremos operaciones CRUD utilizando Diesel ORM y SQLx.

Lo que cubriremos:

Para completar este tutorial, necesitará un conocimiento práctico de Rust, así como la capacidad de acceder y usar Rust, el sistema de compilación y el administrador de paquetes de Rust’s Cargo, y una instancia de un servidor MySQL. .

¿Qué es Diésel?

Diesel es un ORM que soporta PostgreSQL, MySQL, SQLite. ORM significa mapeo relacional de objetos. Los ORM ayudan a los programadores orientados a objetos a abstraer los detalles de las bases de datos relacionales.

Los ORM vienen con generadores de consultas, por lo que no tiene que preocuparse por escribir consultas SQL sin formato. Mediante el uso de ORM, puede comunicarse con bases de datos relacionales como si estuvieran orientadas a objetos.

Para los desarrolladores menos experimentados, el uso de ORM puede ser preferible porque los ORM crean consultas SQL optimizadas. Los ORM también lo hacen menos propenso a los ataques de inyección SQL.

¿Qué es SQLx?

A diferencia de Diesel, SQLx no es un ORM. SQLx es una caja asíncrona de Rust SQL que ofrece verificaciones de consultas SQL en tiempo de compilación. Es independiente tanto de la base de datos como del tiempo de ejecución.

SQLx admite la agrupación de conexiones, el desarrollo multiplataforma, la agrupación anidada, las notificaciones asincrónicas, la seguridad de la capa de transporte y otras características excelentes. Al usar SQLx, debe crear las consultas SQL y las migraciones usted mismo.

Habiendo arañado la superficie, exploremos cómo interactuar con bases de datos relacionales con Diesel y SQLx.

Primeros pasos con Diesel ORM

Los siguientes pasos muestran cómo configurar un proyecto de Rust con Cargo que usa Diesel ORM.

Inicialización de un nuevo proyecto con Diesel ORM

El primer paso es inicializar el proyecto ejecutando el siguiente comando:

En el código anterior, configuramos el proyecto y lo llamamos class_diesel. El nuevo directorio del proyecto debería verse así:

También necesitamos actualizar el archivo Cargo.toml con las dependencias que necesitamos en el proyecto, así:

La dependencia dotenv nos ayuda a administrar las variables de entorno en el proyecto.

Instalación de la CLI diésel

Diesel usa una herramienta CLI separada. Es un binario independiente; no necesitamos agregarlo como una dependencia en el archivo cargo.toml. Simplemente instálelo con el siguiente comando:

Configurando nuestro entorno Diesel

Necesitamos definir una variable DATABASE_URL en nuestro entorno. Así es como Diesel sabe a qué base de datos MySQL conectarse:

Más artículos interesantes de LogRocket:

Cambie la cadena de conexión para que coincida con las credenciales de su base de datos local.

El directorio de su proyecto ahora se verá así:

Ahora ejecute el siguiente comando:

Este comando nos ayudará a configurar la base de datos y crear un directorio de migraciones vacío para administrar el esquema de la base de datos.

Implementación de migraciones Diesel

Las migraciones ayudan al ORM a realizar un seguimiento de las operaciones de la base de datos, como agregar un campo o eliminar una tabla. Puede pensar en ellos como un sistema de control de versiones para su base de datos.

Comencemos creando migraciones para la aplicación de clase usando Diesel CLI. Idealmente, deberíamos tener una tabla que contenga datos sobre los estudiantes de la clase.
Necesitamos crear archivos de migración vacíos y luego llenarlos con SQL para crear una tabla.

Su árbol de archivos se verá así:

El archivo up.sql se usa para crear una migración, mientras que el archivo down.sql se usa para revertirla.

Actualice el archivo up.sql con el SQL para la migración:

Edite el archivo down.sql con SQL que puede revertir la migración:

Después de crear las migraciones ascendentes y descendentes, debemos ejecutar el SQL en la base de datos:

Podemos comenzar a escribir Rust para realizar consultas en la tabla.

Creando filas con Diesel ORM

Escribamos algo de código para establecer una conexión con el servidor MySQL utilizando la cadena de conexión definida en el archivo .env.

A continuación, necesitamos escribir un modelo para la tabla de estudiantes. Los modelos son donde tiene lugar el mapeo relacional de objetos. La plantilla generará el código necesario para convertir una o más filas de la tabla de Estudiantes a la estructura de Estudiantes en Rust.

En el nuevo archivo model.rs que acabamos de crear, agregue lo siguiente:

Con este patrón, la información de la tabla Students se asignará a la estructura Student correspondiente en Rust. La carpeta src ahora debería verse así:

Ahora podemos escribir un script para agregar un estudiante:

En el archivo create_students.rs, podemos invocar los patrones y funciones escritos anteriormente para crear un nuevo estudiante:

La estructura del proyecto ahora se verá así:

Ejecute el nuevo script con el siguiente comando:

Como puede ver en la imagen a continuación, el nuevo archivo de estudiante de John se guardó con una ID de 1. Podemos usar esta ID para consultar las bases de datos de Rust, que veremos en la siguiente sección.

Resultado de mapear la tabla de estudiantes a la estructura para crear un nuevo archivo de estudiante en Diesel ORM

Consultando la base de datos de Rust con Diesel ORM

En la sección anterior, vimos cómo escribir en la base de datos de Rust usando Diesel ORM. También es esencial comprender cómo funciona el sondeo o la lectura.

Escribamos un script para consultar a un estudiante cuya identificación es 1. Comience creando un archivo query_students.rs:

A continuación, en el archivo query_students.rs que acabamos de crear, agregue lo siguiente:

Ejecute el script:

Como puede ver en la imagen a continuación, el resultado es una línea impresa que contiene el nombre, el apellido y la edad del registro del estudiante que consultamos en la base de datos:

Resultado de consultar un archivo de estudiante desde una base de datos Rust usando Diesel ORM

Primeros pasos con SQLx

Ahora que sabemos cómo crear un proyecto que use Diesel ORM para interactuar con bases de datos en Rust, veamos cómo crear un proyecto que use SQLx en su lugar.

Inicializar un nuevo proyecto con SQLx

Comience ejecutando el siguiente comando:

A continuación, agregue las dependencias requeridas al archivo cargo.toml:

Eso es todo lo que necesita para la configuración. Sencillo, ¿verdad?

Para usar SQLx para interactuar con bases de datos en Rust, todo lo que tenemos que hacer es escribir consultas SQL y código Rust. En la sección Diesel ORM, creamos y leímos un archivo de estudiante; en esta sección escribiremos consultas para actualizar y eliminar un registro.

Use SQLx y Rust para actualizar o eliminar registros de la base de datos

Primero, necesitamos escribir código Rust para conectar SQLx al servidor MySQL:

SQLx admite consultas SQL preparadas y no preparadas. Las declaraciones SQL preparadas se oponen a la inyección SQL.

Veamos cómo actualizar el nombre y apellido de un registro con una clave principal de 1:

Ejecute el script con el siguiente comando:

Eliminar el registro también sigue un patrón similar; la única diferencia es la consulta SQL:

Ejecute el script con el siguiente comando:

Ahora puede interactuar con bases de datos en Rust usando Diesel o SQLx.

Conclusión

Los ORM como Diesel son adecuados; lo ayudan a generar parte del SQL que necesita. La mayoría de las veces, solo necesita lo adecuado en sus aplicaciones.

Sin embargo, puede requerir más «magia», en otras palabras, su tiempo y esfuerzo, en aplicaciones más grandes para que los ORM funcionen correctamente y generen consultas SQL.

Si es necesario crear consultas más complejas con requisitos de alto volumen y baja latencia, puede ser mejor usar bibliotecas como SQLx para ejecutar consultas SQL sin formato.

LogRocket: visibilidad completa de las aplicaciones Rust de producción

La depuración de aplicaciones de Rust puede ser un desafío, especialmente cuando los usuarios encuentran problemas que son difíciles de reproducir. Si está interesado en monitorear y rastrear el rendimiento de sus aplicaciones Rust, detectar errores automáticamente y rastrear solicitudes de red lentas y tiempos de carga, pruebe LogRocket. Banner de prueba gratuita de LogRocket Dashboard LogRocket

LogRocket es como un DVR para aplicaciones web y móviles, literalmente graba todo lo que sucede en su aplicación Rust. En lugar de adivinar por qué ocurren los problemas, puede agregar e informar el estado en el que se encontraba su aplicación cuando ocurrió un problema. LogRocket también supervisa el rendimiento de su aplicación, informando métricas como la carga de la CPU del cliente, el uso de la memoria del cliente y más.

Modernice la forma en que depura sus aplicaciones de Rust: comience a monitorear de forma gratuita.

Fuente

Facebook
Twitter
LinkedIn
WhatsApp

Deja una respuesta

Artículos Relacionados