SQLX - Bộ công cụ SQL mã nguồn mở dựa trên Rust
(github.com/launchbadge)- 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_URLtrong tệp.env
- Có thể dễ dàng kiểm tra tại thời điểm biên dịch bằng cách chỉ định
- 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ộ:
LISTENvàNOTIFY - 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
Cá nhân tôi thích cách tiếp cận của
sqlctrong Go hơn.Về cơ bản, đó là cách viết truy vấn native trước rồi tạo mã.
Vấn đề không thể tuần tự hóa trường đối chiếu
_binthànhStringđã 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.Có vẻ cuối cùng cũng đã sửa được, nhưng mất gần một năm.
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á.
https://github.com/launchbadge/sqlx/issues/3387
Có vẻ là cái này
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.