0Pricing
Learn Rust Coding · บทเรียน

การเชื่อมต่อฐานข้อมูล

พูล sqlx

การเชื่อมต่อฐานข้อมูล เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 เพื่อสร้างพูลพร้อมข้อจำกัดและการจำกัดเวลา
  • พูลโคลนได้โดยใช้ทรัพยากรน้อย และควรปิดเมื่อปิดโปรแกรม

ถัดไป: คำสั่งค้นหาที่ตรวจสอบขณะคอมไพล์

คำถามที่พบบ่อย

บทเรียน “การเชื่อมต่อฐานข้อมูล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเชื่อมต่อฐานข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเชื่อมต่อฐานข้อมูล”

พูล sqlx คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 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