Conexão com um banco de dados
Pools do sqlx
Conexão com um banco de dados é uma aula grátis de Learn Rust Coding no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Learn Rust Coding, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Learn Rust Coding inclui 4 aulas no total.
O que é sqlx?
sqlx é um conjunto de ferramentas SQL assíncrono escrito exclusivamente em Rust. Ele não é um ORM: você escreve SQL real, mas obtém verificação em tempo de compilação e resultados com segurança de tipos.
- Oferece suporte a Postgres, MySQL e SQLite
- Baseia-se em ambientes de execução assíncronos, como o Tokio
Adicionando sqlx
Declare sqlx com o ambiente de execução e os recursos de banco de dados necessários. Isso edita Cargo.toml e é executado no seu terminal.
[dependencies]
sqlx = { version = "0.7", features = ["runtime-tokio", "postgres"] }
tokio = { version = "1", features = ["full"] }Cadeias de conexão
Uma cadeia de conexão (DSN) informa ao sqlx como chegar ao banco de dados.
- Postgres:
postgres://user:pass@host:5432/dbname - SQLite:
sqlite://app.db
Por que usar um conjunto de conexões?
Abrir uma conexão para cada consulta é lento. Um conjunto de conexões mantém várias conexões reutilizáveis, fornece-as conforme necessário e depois as devolve.
- Limita a simultaneidade
- Distribui o custo das conexões
Criando um conjunto de conexões
Use PgPoolOptions para configurar e conectar um conjunto de conexões. Normalmente, isso é feito uma vez na inicialização.
use sqlx::postgres::PgPoolOptions;
async fn connect() -> sqlx::Pool<sqlx::Postgres> {
PgPoolOptions::new()
.max_connections(5)
.connect("postgres://user:pass@localhost/app")
.await
.unwrap()
}Configurando o conjunto de conexões
Ajuste o conjunto com opções como o número máximo de conexões e o tempo limite para adquirir uma conexão, de acordo com sua carga de trabalho.
use sqlx::postgres::PgPoolOptions;
use std::time::Duration;
fn options() -> PgPoolOptions {
PgPoolOptions::new()
.max_connections(10)
.acquire_timeout(Duration::from_secs(3))
}Uma consulta simples por meio do conjunto de conexões
Passe o conjunto de conexões (ou uma referência a ele) como executor para executar uma consulta. O conjunto obtém uma conexão automaticamente.
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
}Representando um conjunto de conexões em Rust puro
Conceitualmente, um conjunto de conexões é uma coleção limitada de recursos reutilizáveis. Este exemplo executável esboça a obtenção e a devolução 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());
}Lendo o DSN do ambiente
Mantenha os segredos fora do código-fonte. Leia DATABASE_URL do ambiente durante a inicialização.
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 é barato
Um Pool usa contagem de referências internamente. Cloná-lo compartilha as mesmas conexões subjacentes, portanto você pode passar clones livremente para as tarefas.
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;
});
}Fechando o conjunto de conexões
Durante o encerramento, chame close().await para esvaziar e fechar todas as conexões de forma adequada.
use sqlx::{Pool, Postgres};
async fn shutdown(pool: Pool<Postgres>) {
pool.close().await;
}Verificação rápida
Teste sua compreensão sobre conexões com sqlx.
Recapitulação
Você aprendeu a conectar-se com sqlx:
- sqlx é um kit de ferramentas SQL assíncrono e seguro quanto aos tipos, não um ORM
- Um DSN descreve a localização do banco de dados
- Use
PgPoolOptionspara criar um pool com limites e tempos limite - É barato clonar pools, e eles devem ser fechados durante o encerramento
A seguir: consultas verificadas em tempo de compilação.
Perguntas Frequentes
A aula “Conexão com um banco de dados” é grátis?
Sim — o texto completo de “Conexão com um banco de dados” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Learn Rust Coding, atualize para CoddyKit PRO. O curso de Learn Rust Coding inclui 4 aulas no total.
O que vou aprender em “Conexão com um banco de dados”?
Pools do sqlx Você pratica Learn Rust Coding com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Learn Rust Coding?
Nenhuma experiência prévia é necessária. Learn Rust Coding no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Conexão com um banco de dados”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Learn Rust Coding?
Sim. Cada aula de Learn Rust Coding inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Conexão com um banco de dados
- Consultas verificadas em tempo de compilação
- Operações CRUD
- Migrações