การเชื่อมต่อฐานข้อมูล
พูล 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเชื่อมต่อฐานข้อมูล
- คำสั่งค้นหาที่ตรวจสอบขณะคอมไพล์
- การดำเนินการ CRUD
- การย้ายโครงสร้างฐานข้อมูล