Conexión a una base de datos
Pools de sqlx
Conexión a una base de datos es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 4 lecciones en total.
¿Qué es sqlx?
sqlx es un toolkit SQL asíncrono escrito íntegramente en Rust. No es un ORM: usted escribe SQL real, pero obtiene comprobación en tiempo de compilación y resultados con tipos seguros.
- Admite Postgres, MySQL y SQLite
- Se basa en runtimes asíncronos como Tokio
Añadir sqlx
Declare sqlx con las funcionalidades de runtime y base de datos que necesite. Esto modifica Cargo.toml y se ejecuta en su terminal.
[dependencies]
sqlx = { version = "0.7", features = ["runtime-tokio", "postgres"] }
tokio = { version = "1", features = ["full"] }Cadenas de conexión
Una cadena de conexión (DSN) indica a sqlx cómo llegar a la base de datos.
- Postgres:
postgres://user:pass@host:5432/dbname - SQLite:
sqlite://app.db
¿Por qué usar un pool de conexiones?
Abrir una conexión para cada consulta es lento. Un pool mantiene un conjunto de conexiones reutilizables, las entrega cuando se necesitan y después las devuelve.
- Limita la concurrencia
- Amortiza el coste de las conexiones
Crear un pool
Use PgPoolOptions para configurar y conectar un pool. Normalmente esto se hace una vez al iniciar la aplicación.
use sqlx::postgres::PgPoolOptions;
async fn connect() -> sqlx::Pool<sqlx::Postgres> {
PgPoolOptions::new()
.max_connections(5)
.connect("postgres://user:pass@localhost/app")
.await
.unwrap()
}Configurar el pool
Ajuste el pool con opciones como el número máximo de conexiones y el tiempo de espera para adquirir una conexión, según su carga de trabajo.
use sqlx::postgres::PgPoolOptions;
use std::time::Duration;
fn options() -> PgPoolOptions {
PgPoolOptions::new()
.max_connections(10)
.acquire_timeout(Duration::from_secs(3))
}Una consulta sencilla mediante el pool
Pase el pool (o una referencia a él) como executor para ejecutar una consulta. El pool obtiene una conexión automáticamente.
use sqlx::Pool;
use sqlx::Postgres;
async fn ping(pool: &Pool<Postgres>) -> i32 {
let row: (i32,) = sqlx::query_as("SELECT 1")
.fetch_one(pool)
.await
.unwrap();
row.0
}Modelar un pool en Rust puro
Conceptualmente, un pool es una colección limitada de recursos reutilizables. Este ejemplo ejecutable esquematiza la obtención y devolución de recursos.
struct Pool { available: u32, max: u32 }
impl Pool {
fn acquire(&mut self) -> bool {
if self.available > 0 { self.available -= 1; true } else { false }
}
fn release(&mut self) { self.available += 1; }
}
fn main() {
let mut p = Pool { available: 2, max: 2 };
println!("{}", p.acquire());
println!("{}", p.acquire());
println!("{}", p.acquire());
p.release();
println!("{}", p.acquire());
}Leer el DSN del entorno
Mantenga los secretos fuera del código fuente. Lea DATABASE_URL del entorno al iniciar la aplicación.
use sqlx::postgres::PgPoolOptions;
async fn connect() -> sqlx::Pool<sqlx::Postgres> {
let url = std::env::var("DATABASE_URL").unwrap();
PgPoolOptions::new().connect(&url).await.unwrap()
}Clonar es barato
Un Pool utiliza internamente un contador de referencias. Al clonarlo se comparten las mismas conexiones subyacentes, por lo que puede pasar clones a las tareas sin restricciones.
use sqlx::{Pool, Postgres};
async fn spawn_work(pool: Pool<Postgres>) {
let p2 = pool.clone();
tokio::spawn(async move {
let _ = sqlx::query("SELECT 1").execute(&p2).await;
});
}Cerrar el pool
Al apagar la aplicación, llame a close().await para vaciar y cerrar todas las conexiones correctamente.
use sqlx::{Pool, Postgres};
async fn shutdown(pool: Pool<Postgres>) {
pool.close().await;
}Comprobación rápida
Compruebe su comprensión de las conexiones con sqlx.
Resumen
Ha aprendido a conectarse con sqlx:
- sqlx es un toolkit SQL asíncrono y con seguridad de tipos, no un ORM
- Un DSN describe la ubicación de la base de datos
- Use
PgPoolOptionspara crear un pool con límites y tiempos de espera - Los pools se pueden clonar de forma económica y deben cerrarse al apagar la aplicación
A continuación: consultas comprobadas en tiempo de compilación.
Preguntas frecuentes
¿La lección «Conexión a una base de datos» es gratis?
Sí — el texto completo de «Conexión a una base de datos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 4 lecciones en total.
¿Qué aprenderé en «Conexión a una base de datos»?
Pools de sqlx Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn Rust Coding?
No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Conexión a una base de datos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?
Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Conexión a una base de datos
- Consultas comprobadas en compilación
- Operaciones CRUD
- Migraciones