¿Qué es SQLx y para qué sirve?
\n\nSQLx es una biblioteca asíncrona y pura de Rust para trabajar con bases de datos, que implementa el enfoque "SQL sin ORM". A diferencia de soluciones ORM como Diesel o SeaORM, SQLx no oculta las consultas SQL detrás de abstracciones, sino que permite escribir código SQL puro, garantizando al mismo tiempo la seguridad total de tipos en tiempo de compilación.
\n\nPrincipales ventajas de SQLx:
\n- \n
- Seguridad de tipos en tiempo de compilación — SQLx verifica sus consultas SQL contra el esquema de la base de datos directamente durante la compilación del proyecto. \n
- Asincronía integrada — la biblioteca es totalmente compatible con async/await, ideal para aplicaciones web de alta carga. \n
- Soporte para múltiples SGBD — PostgreSQL, MySQL, SQLite y MSSQL. \n
- Sin magia — usted escribe SQL normal y la biblioteca solo ayuda a pasar parámetros de forma segura y obtener resultados. \n
- Migraciones — sistema integrado de gestión de migraciones del esquema de la base de datos. \n
SQLx es ideal para proyectos donde se requiere control total sobre las consultas, rendimiento y seguridad de tipos, sin necesidad de aprender DSL complejos (lenguajes específicos de dominio) de ORM.
\n\nInstalación
\n\nSQLx se instala a través del gestor de paquetes Cargo. Agregue la dependencia en el archivo Cargo.toml:
[dependencies]\nsqlx = { version = "0.7", features = ["runtime-tokio-rustls", "postgres"] }\ntokio = { version = "1", features = ["full"] }\nanyhow = "1.0"\n\nDependiendo de la base de datos utilizada, seleccione el flag de característica correspondiente:
\n- \n
postgres— para PostgreSQL \n mysql— para MySQL \n sqlite— para SQLite \n mssql— para Microsoft SQL Server \n
Para el runtime puede elegir runtime-tokio-rustls (recomendado) o runtime-async-std-rustls.
Inicio rápido
\n\nCreemos una aplicación simple que se conecte a PostgreSQL y ejecute una consulta:
\n\nuse sqlx::postgres::PgPoolOptions;\nuse anyhow::Result;\n\n#[tokio::main]\nasync fn main() -> Result<()> {\n // Creamos un pool de conexiones\n let pool = PgPoolOptions::new()\n .max_connections(5)\n .connect("postgres://user:password@localhost/mydb")\n .await?;\n\n // Ejecutamos una consulta simple\n let row: (i64,) = sqlx::query_as("SELECT $1::bigint")\n .bind(42_i64)\n .fetch_one(&pool)\n .await?;\n\n println!("Resultado: {}", row.0);\n\n Ok(())\n}\n\nEste código crea un pool de 5 conexiones a la base de datos, ejecuta una consulta con un parámetro y muestra el resultado.
\n\nMétodos y funciones principales de SQLx
\n\n1. sqlx::query
\nQué hace: Crea una nueva consulta SQL con capacidad de enlazar parámetros. Es el bloque de construcción básico para todas las operaciones.
\nParámetros:
\n- \n
sql: &str— cadena de consulta SQL con marcadores de posición ($1, $2 para PostgreSQL; ? para MySQL/SQLite) \n
Ejemplo:
\nuse sqlx::query;\n\nlet query = sqlx::query("SELECT * FROM users WHERE id = $1 AND active = $2")\n .bind(1)\n .bind(true);\n\n2. .bind()
\nQué hace: Enlaza un valor al parámetro de la consulta. El orden de las llamadas corresponde al orden de los marcadores de posición en SQL.
\nParámetros:
\n- \n
value: impl Encode + Type<DB>— cualquier valor que pueda codificarse para la BD (i32, String, bool, Option, etc.) \n
Ejemplo:
\nlet user_id: i32 = 42;\nlet user_name: &str = "Alice";\n\nsqlx::query("INSERT INTO users (id, name) VALUES ($1, $2)")\n .bind(user_id)\n .bind(user_name)\n .execute(&p También en la biblioteca
Procesamiento de Markdown en Node.js: bibliotecas marked, showdown y remarkable
Trabajo con XML en Kotlin: bibliotecas y herramientas para análisis y creación
Trabajo con YAML en C++: biblioteca yaml-cpp para análisis y serialización
Framework CLI para C++: cppcli — creación de aplicaciones de consola
Tokens JWT en Java: Guía completa para trabajar con JSON Web Tokens