0Pricing
Learn Rust Coding · Урок

Подключение к базе данных

Пулы sqlx

«Подключение к базе данных» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Что такое sqlx?

sqlx — это асинхронный набор инструментов для SQL, написанный на чистом Rust. Это не ORM: Вы пишете настоящий SQL, но получаете проверку во время компиляции и типобезопасные результаты.

  • Поддерживает Postgres, MySQL и SQLite
  • Работает на асинхронных средах выполнения, таких как Tokio

Добавление sqlx

Объявите sqlx с нужной средой выполнения и функциями базы данных. Эта команда изменяет Cargo.toml и запускается в терминале.

[dependencies]
sqlx = { version = "0.7", features = ["runtime-tokio", "postgres"] }
tokio = { version = "1", features = ["full"] }

Строки подключения

Строка подключения (DSN) сообщает sqlx, как обратиться к базе данных.

  • Postgres: postgres://user:pass@host:5432/dbname
  • SQLite: sqlite://app.db

Зачем нужен пул подключений?

Открывать отдельное подключение для каждого запроса медленно. Пул хранит набор повторно используемых подключений, выдаёт их по мере необходимости, а затем принимает обратно.

  • Ограничивает параллелизм
  • Распределяет стоимость установки подключений

Создание пула

Используйте PgPoolOptions, чтобы настроить и подключить пул. Обычно это выполняется один раз при запуске.

use sqlx::postgres::PgPoolOptions;

async fn connect() -> sqlx::Pool<sqlx::Postgres> {
    PgPoolOptions::new()
        .max_connections(5)
        .connect("postgres://user:pass@localhost/app")
        .await
        .unwrap()
}

Настройка пула

Настройте пул с помощью таких параметров, как максимальное число подключений и время ожидания получения подключения, в соответствии с рабочей нагрузкой.

use sqlx::postgres::PgPoolOptions;
use std::time::Duration;

fn options() -> PgPoolOptions {
    PgPoolOptions::new()
        .max_connections(10)
        .acquire_timeout(Duration::from_secs(3))
}

Простой запрос через пул

Передайте пул или ссылку на него как исполнитель, чтобы выполнить запрос. Пул автоматически выдаст подключение.

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
}

Моделирование пула в обычном Rust

С концептуальной точки зрения пул — это ограниченная коллекция повторно используемых ресурсов. Этот запускаемый пример показывает получение и возврат ресурса.

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());
}

Чтение DSN из окружения

Не храните секреты в исходном коде. Прочитайте DATABASE_URL из окружения при запуске.

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()
}

Клонирование — дешёвая операция

Pool внутри использует подсчёт ссылок. Его клонирование совместно использует те же базовые подключения, поэтому клоны можно свободно передавать задачам.

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;
    });
}

Закрытие пула

При завершении работы вызовите close().await, чтобы корректно дождаться завершения операций и закрыть все подключения.

use sqlx::{Pool, Postgres};

async fn shutdown(pool: Pool<Postgres>) {
    pool.close().await;
}

Быстрая проверка

Проверьте, насколько хорошо Вы поняли подключение с помощью sqlx.

Повторение

Вы научились подключаться с помощью sqlx:

  • sqlx — это асинхронный типобезопасный набор инструментов для SQL, а не ORM
  • DSN описывает расположение базы данных
  • Используйте PgPoolOptions, чтобы создать пул с ограничениями и тайм-аутами
  • Пулы можно дёшево клонировать; при завершении работы их следует закрывать

Далее: запросы с проверкой во время компиляции.

Часто задаваемые вопросы

Урок «Подключение к базе данных» бесплатный?

Да — полный текст урока «Подключение к базе данных» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «Подключение к базе данных»?

Пулы sqlx Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Подключение к базе данных»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn Rust Coding?

Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Подключение к базе данных
  2. Запросы с проверкой во время компиляции
  3. Операции CRUD
  4. Миграции
← Назад к Learn Rust Coding