Rust数据库操作:SQLx与Diesel实战
3 阅读
预计 3 分钟
Rust的数据库生态成熟,SQLx提供异步查询,Diesel提供类型安全ORM。
## SQLx(异步)
```rust
use sqlx::sqlite::SqlitePool;
#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {
let pool = SqlitePool::connect("sqlite:mydb.db").await?;
sqlx::query!(
"INSERT INTO users (name, email) VALUES (?, ?)",
"Alice", "alice@example.com"
)
.execute(&pool)
.await?;
let users = sqlx::query_as!(
User,
"SELECT id, name, email FROM users"
)
.fetch_all(&pool)
.await?;
Ok(())
}
```
## Diesel(ORM)
```rust
use diesel::prelude::*;
#[derive(Queryable, Selectable)]
#[diesel(table_name = crate::schema::users)]
struct User {
id: i32,
name: String,
email: String,
}
#[derive(Insertable)]
#[diesel(table_name = crate::schema::users)]
struct NewUser {
name: String,
email: String,
}
fn create_user(conn: &mut PgConnection, name: &str, email: &str) -> User {
let new_user = NewUser {
name: name.to_string(),
email: email.to_string(),
};
diesel::insert_into(users::table)
.values(&new_user)
.returning(User::as_returning())
.get_result(conn)
.expect("Error saving user")
}
```
选择建议:需要编译期SQL验证用SQLx,偏好ORM风格用Diesel。
0 条评论 欢迎参与讨论