小编Joh*_*rgo的帖子

Rust Sqlx 处理 INSERT ON CONFLICT

我有一个查询将用户的数据插入数据库。它工作正常,但该users表在 上有一个唯一索引username,因此当尝试创建用户名已存在的行时,它会抛出错误:

pub async fn create(user: UserRequest, pool: &PgPool) -> anyhow::Result<User> {
   let new_user = sqlx::query_as!(
       User,
       r#"
       INSERT INTO users (first_name, username)
       VALUES ($1, $2)
       RETURNING id, first_name, username
       "#,
       &user.first_name,
       &user.username,
   )
   .fetch_one(&pool.clone())
   .await?;
    
   Ok(User {
       id: new_user.id,
       first_name: new_user.first_name,
       username: new_user.username,
   })
}
Run Code Online (Sandbox Code Playgroud)

&user是一个函数参数,定义为:

pub struct UserRequest {
    pub first_name: String,
    pub username: String,
}
Run Code Online (Sandbox Code Playgroud)

使用此函数的端点用于match检查它是否是Ok(user)或其他任何内容,并返回其响应:

pub async fn create_user(
    user: web::Json<UserRequest>,
    pool: Data<PgPool>,
) -> impl Responder …
Run Code Online (Sandbox Code Playgroud)

rust actix-web rust-sqlx

3
推荐指数
1
解决办法
4787
查看次数

标签 统计

actix-web ×1

rust ×1

rust-sqlx ×1