14 คะแนน โดย xguru 2025-08-04 | 6 ความคิดเห็น | แชร์ทาง WhatsApp
  • SQL crate แบบอะซิงโครนัส (async) ที่สร้างด้วย Rust ล้วน และสามารถใช้ Rust macro เพื่อ ตรวจสอบ SQL query ตั้งแต่คอมไพล์ไทม์ได้โดยไม่ต้องใช้ DSL
    • ไม่ใช่ ORM! : เหมาะอย่างยิ่งสำหรับ โปรเจ็กต์ที่ต้องการใช้ SQL ตรง ๆ โดยไม่ผ่าน ORM
  • รองรับฐานข้อมูลอย่าง PostgreSQL, MySQL, MariaDB, SQLite
    • สามารถระบุ DATABASE_URL ในไฟล์ .env เพื่อให้ตรวจสอบได้ตั้งแต่คอมไพล์ไทม์อย่างง่ายดาย
  • อิมพลีเมนต์แบบ Pure Rust (ไดรเวอร์ MySQL/MariaDB เขียนด้วย Rust 100% ส่วน SQLite เชื่อมต่อกับไลบรารี C) และออกแบบอย่างปลอดภัยโดย ไม่ใช้โค้ด unsafe จึงมีความน่าเชื่อถือสูง
  • ใช้งานร่วมกับ Rust asynchronous runtime หลักอย่าง Tokio, async-std, actix และ TLS backend ที่หลากหลายได้ พร้อมรองรับการใช้งานแบบไม่ขึ้นกับแพลตฟอร์ม
  • ใช้ ไลเซนส์คู่ MIT/Apache 2.0 จึงนำไปใช้ได้กว้างขวางทั้งในโปรเจ็กต์โอเพนซอร์สและเชิงพาณิชย์

ฟีเจอร์หลัก

  • Connection pooling ด้วย sqlx::Pool
  • Row streaming แบบอะซิงโครนัส จากฐานข้อมูล
  • เตรียม query และแคชอัตโนมัติ แยกตามแต่ละ connection
  • รัน query ที่ไม่ได้เตรียมไว้ล่วงหน้า (ไม่ใช่ Prepared) ได้อย่างง่ายดาย และคืนผลลัพธ์เป็น Row type เดียวกัน
  • รองรับการเชื่อมต่อแบบเข้ารหัส TLS กับ DB ที่รองรับ (MySQL, MariaDB, PostgreSQL)
  • รองรับ การแจ้งเตือนของ PostgreSQL แบบอะซิงโครนัส : LISTEN และ NOTIFY
  • รองรับ nested transaction โดยใช้ savepoint
  • รองรับ AnyPool ซึ่งสามารถสลับ DB driver ได้แบบเลือกตามรันไทม์

6 ความคิดเห็น

 
secret3056 2025-08-04

โดยส่วนตัวแล้วผมชอบแนวทางของ sqlc ในภาษา Go มากกว่า

เป็นวิธีที่เริ่มจากเขียน native query ก่อน แล้วค่อย generate โค้ด

 
mokaa 2025-08-04

มีปัญหาที่ฟิลด์ _bin collation ไม่สามารถซีเรียลไลซ์เป็น String ได้ ซึ่งผ่านมานานกว่าหนึ่งปีก็ยังไม่ได้รับการแก้ไข จึงค่อนข้างลำบากหากจะนำไปใช้ในโปรดักชัน ยิ่งไปกว่านั้น นี่ยังเป็นปัญหา regression ทำให้ผู้ใช้และไลบรารีจำนวนมากยังคงอยู่ที่เวอร์ชัน 0.7

 
secret3056 2025-08-04

ดูเหมือนว่าจะแก้ได้แล้วนะ แต่ก็ใช้เวลาเกือบ 1 ปีเลย

 
unsure4000 2025-08-04

ขอลิงก์ issue ได้ไหมครับ? ผมหาดูแล้วแต่หาเจอค่อนข้างยากครับ

 
yshrust 2025-08-04

https://github.com/launchbadge/sqlx/issues/3387

น่าจะอันนี้ครับ

 
xguru 2025-08-04

SQLx - Rust SQL Toolkit
เคยแชร์ไว้ครั้งหนึ่งเมื่อ 5 ปีก่อน และในช่วงเวลานั้นก็มีการเปลี่ยนแปลงไปมากพอสมควร

ตอนนี้สามารถตรวจสอบได้ตั้งแต่ขั้นตอนคอมไพล์โดยเชื่อมต่อกับ DB จริง
และรองรับ tokio/async-std/actix
รวมถึงมีการเสริมความสามารถและการทดสอบสำหรับการใช้งานจริง เช่น connection pool, nested transaction, AnyPool ทำให้สามารถนำไปใช้กับบริการขนาดใหญ่ได้ด้วย
จึงกลายเป็นโปรเจกต์ที่น่าแนะนำสำหรับโปรเจกต์ที่ใช้ SQL โดยตรงโดยไม่ใช้ ORM

นอกจากนี้ยังมีโปรเจกต์อย่าง SeaORM และ Welds ที่สร้าง ORM ขึ้นมาผ่าน sqlx ด้วย
ส่วนอื่น ๆ ก็มีทั้ง query builder อย่าง SeaQuery และเว็บแอปพลิเคชันเฟรมเวิร์กอย่าง SQLPage ด้วยเช่นกัน