SQLX - ชุดเครื่องมือ SQL โอเพนซอร์สบนพื้นฐาน Rust
(github.com/launchbadge)- 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 ความคิดเห็น
โดยส่วนตัวแล้วผมชอบแนวทางของ
sqlcในภาษา Go มากกว่าเป็นวิธีที่เริ่มจากเขียน native query ก่อน แล้วค่อย generate โค้ด
มีปัญหาที่ฟิลด์
_bin collationไม่สามารถซีเรียลไลซ์เป็นStringได้ ซึ่งผ่านมานานกว่าหนึ่งปีก็ยังไม่ได้รับการแก้ไข จึงค่อนข้างลำบากหากจะนำไปใช้ในโปรดักชัน ยิ่งไปกว่านั้น นี่ยังเป็นปัญหา regression ทำให้ผู้ใช้และไลบรารีจำนวนมากยังคงอยู่ที่เวอร์ชัน 0.7ดูเหมือนว่าจะแก้ได้แล้วนะ แต่ก็ใช้เวลาเกือบ 1 ปีเลย
ขอลิงก์ issue ได้ไหมครับ? ผมหาดูแล้วแต่หาเจอค่อนข้างยากครับ
https://github.com/launchbadge/sqlx/issues/3387
น่าจะอันนี้ครับ
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 ด้วยเช่นกัน