14 điểm bởi xguru 2025-08-04 | 6 bình luận | Chia sẻ qua WhatsApp
  • Crate SQL thuần Rust hoạt động theo kiểu bất đồng bộ (async), cho phép xác thực truy vấn SQL tại thời điểm biên dịch mà không cần DSL bằng macro Rust
    • Không phải ORM! : Tối ưu cho các dự án muốn dùng trực tiếp SQL mà không cần ORM
  • Hỗ trợ các cơ sở dữ liệu như PostgreSQL, MySQL, MariaDB, SQLite
    • Có thể dễ dàng kiểm tra tại thời điểm biên dịch bằng cách chỉ định DATABASE_URL trong tệp .env
  • Triển khai Pure Rust (driver MySQL/MariaDB được viết 100% bằng Rust, SQLite tích hợp thư viện C), được thiết kế an toàn không dùng mã unsafe, nên có độ tin cậy cao
  • Tương thích với các runtime bất đồng bộ Rust phổ biến như Tokio, async-std, actix cùng nhiều backend TLS khác nhau, và có thể sử dụng độc lập với nền tảng
  • Giấy phép kép MIT/Apache 2.0, cho phép ứng dụng rộng rãi trong các dự án mã nguồn mở và thương mại

Tính năng chính

  • Connection pooling với sqlx::Pool
  • Streaming Row bất đồng bộ dữ liệu từ cơ sở dữ liệu
  • Tự động chuẩn bị và lưu đệm truy vấn theo từng connection
  • Có thể dễ dàng chạy cả truy vấn không chuẩn bị sẵn (không phải Prepared), kết quả vẫn được trả về dưới cùng kiểu Row
  • Hỗ trợ kết nối mã hóa TLS trên các DB được hỗ trợ (MySQL, MariaDB, PostgreSQL)
  • Hỗ trợ thông báo PostgreSQL bất đồng bộ: LISTENNOTIFY
  • Hỗ trợ giao dịch lồng nhau với savepoint (Savepoint)
  • Hỗ trợ AnyPool, cho phép thay thế driver DB một cách linh hoạt tại runtime

6 bình luận

 
secret3056 2025-08-04

Cá nhân tôi thích cách tiếp cận của sqlc trong Go hơn.

Về cơ bản, đó là cách viết truy vấn native trước rồi tạo mã.

 
mokaa 2025-08-04

Vấn đề không thể tuần tự hóa trường đối chiếu _bin thành String đã hơn 1 năm vẫn chưa được sửa, nên khá khó để dùng cho môi trường production. Thậm chí đây còn là một lỗi hồi quy, nên nhiều người dùng và thư viện vẫn đang dừng ở phiên bản 0.7.

 
secret3056 2025-08-04

Có vẻ cuối cùng cũng đã sửa được, nhưng mất gần một năm.

 
unsure4000 2025-08-04

Bạn có thể cho xin link của issue được không? Mình có tìm thử rồi nhưng khó tìm quá.

 
xguru 2025-08-04

SQLx - Bộ công cụ SQL cho Rust
Tôi đã từng chia sẻ về nó một lần cách đây 5 năm, và trong thời gian đó đã có khá nhiều thay đổi.

Giờ đây đã có thể xác thực ở thời điểm biên dịch bằng cách liên kết với DB thực tế,
tương thích cả với tokio/async-std/actix,
các tính năng và kiểm thử hữu dụng trong môi trường thực tế như connection pool, nested transaction, AnyPool cũng đã được tăng cường, nên đây đã trở thành một dự án có thể áp dụng cho cả các dịch vụ quy mô lớn và đáng để khuyến nghị cho những dự án dùng SQL trực tiếp mà không có ORM.

Ngoài ra, cũng đã xuất hiện các dự án như SeaORM, Welds triển khai ORM thông qua sqlx.
Bên cạnh đó còn có những thứ như trình tạo truy vấn SeaQuery hay framework ứng dụng web SQLPage.