0Pricing
Learn Rust Coding · Pelajaran

Menghubungkan ke Database

Pool sqlx

Menghubungkan ke Database adalah pelajaran Learn Rust Coding gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn Rust Coding, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn Rust Coding mencakup 4 pelajaran total.

Apa itu sqlx?

sqlx adalah perangkat SQL asinkron berbasis Rust murni. sqlx bukan ORM; Anda menulis SQL sungguhan, tetapi tetap mendapatkan pemeriksaan saat kompilasi dan hasil yang aman secara tipe.

  • Mendukung Postgres, MySQL, SQLite
  • Dibangun di atas waktu proses asinkron seperti Tokio

Menambahkan sqlx

Nyatakan sqlx dengan waktu proses dan fitur basis data yang Anda perlukan. Langkah ini mengubah Cargo.toml dan menjalankannya di terminal Anda.

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

String koneksi

String koneksi (DSN) memberi tahu sqlx cara mencapai basis data.

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

Mengapa menggunakan kumpulan koneksi?

Membuka koneksi untuk setiap kueri berjalan lambat. Sebuah kumpulan koneksi menyimpan sekumpulan koneksi yang dapat digunakan kembali dan membagikannya saat diperlukan, lalu mengambilnya kembali.

  • Membatasi konkurensi
  • Mengurangi biaya koneksi per penggunaan

Membuat kumpulan koneksi

Gunakan PgPoolOptions untuk mengonfigurasi dan menyambungkan kumpulan koneksi. Ini biasanya dilakukan sekali saat mulai.

use sqlx::postgres::PgPoolOptions;

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

Mengonfigurasi kumpulan koneksi

Sesuaikan kumpulan koneksi dengan opsi seperti jumlah koneksi maksimum dan batas waktu pengambilan agar sesuai dengan beban kerja Anda.

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

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

Kueri sederhana melalui kumpulan koneksi

Teruskan kumpulan koneksi (atau referensinya) sebagai pelaksana untuk menjalankan kueri. Kumpulan koneksi akan mengambil koneksi secara otomatis.

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
}

Memodelkan kumpulan koneksi dalam Rust biasa

Secara konsep, kumpulan koneksi adalah koleksi sumber daya yang dapat digunakan kembali dengan batas jumlah tertentu. Contoh yang dapat dijalankan ini menggambarkan pengambilan dan pengembalian.

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

Membaca DSN dari env

Jangan menyimpan rahasia di dalam kode sumber. Baca DATABASE_URL dari lingkungan saat mulai.

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

Menggandakan itu murah

Pool menggunakan penghitung referensi secara internal. Menggandakannya akan berbagi koneksi dasar yang sama, sehingga Anda dapat meneruskan hasil penggandaan ke tugas dengan bebas.

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

Menutup kumpulan koneksi

Saat dimatikan, panggil close().await untuk mengosongkan dan menutup semua koneksi dengan baik.

use sqlx::{Pool, Postgres};

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

Pemeriksaan Singkat

Uji pemahaman Anda tentang penyambungan dengan sqlx.

Rangkuman

Anda telah mempelajari cara menyambung dengan sqlx:

  • sqlx adalah perangkat SQL asinkron yang aman secara tipe, bukan ORM
  • DSN menjelaskan lokasi basis data
  • Gunakan PgPoolOptions untuk membuat kumpulan koneksi dengan batas dan batas waktu
  • Kumpulan koneksi murah untuk digandakan dan harus ditutup saat dimatikan

Berikutnya: kueri yang diperiksa saat kompilasi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menghubungkan ke Database” gratis?

Ya — teks lengkap “Menghubungkan ke Database” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn Rust Coding, upgrade ke CoddyKit PRO. Kursus Learn Rust Coding mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menghubungkan ke Database”?

Pool sqlx Kamu berlatih Learn Rust Coding dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Learn Rust Coding?

Tidak diperlukan pengalaman sebelumnya. Learn Rust Coding di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Menghubungkan ke Database” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn Rust Coding ini?

Ya. Setiap pelajaran Learn Rust Coding menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Menghubungkan ke Database
  2. Query yang Diperiksa saat Kompilasi
  3. Operasi CRUD
  4. Migrasi
← Kembali ke Learn Rust Coding