0Pricing
Learn Rust Coding · Aula

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 PgPoolOptions para 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

  1. Conexão com um banco de dados
  2. Consultas verificadas em tempo de compilação
  3. Operações CRUD
  4. Migrações
← Voltar para Learn Rust Coding