代码之家  ›  专栏  ›  技术社区  ›  Dolphin

插入记录时返回id被使用的原因

  •  0
  • Dolphin  · 技术社区  · 4 年前

    我用的是铁锈 rustc 1.59.0 (9d1b2106e 2022-02-23) 柴油机 diesel = { version = "1.4.8", features = ["postgres","64-column-tables","chrono","serde_json"] } 要在PostgreSQL 13数据库中插入一条记录,我要做的是在插入操作之后获取插入的记录id。这是目前铁锈代码的一部分:

    let menu_id = diesel::insert_into(crate::model::diesel::dolphin::dolphin_schema::menu_resource::table)
            .values(&new_menu_resource)
            .returning(crate::model::diesel::dolphin::dolphin_schema::menu_resource::id)
            .on_conflict_do_nothing()
            .execute(&connection)
            .unwrap();
    

    这是我的 menu_resource 在铁锈中定义:

    table! {
        menu_resource (id) {
            id -> Int4,
            name -> Varchar,
            res_type -> Int4,
            created_time -> Int8,
            updated_time -> Int8,
            remark -> Nullable<Varchar>,
            path -> Varchar,
            parent_id -> Int4,
            component -> Nullable<Varchar>,
            sort -> Int4,
            name_zh -> Varchar,
            tree_id_path -> Varchar,
            code -> Varchar,
        }
    }
    

    但是最近 menu_id 是 usize 数据类型。为什么要返回 unsize 数据类型不是 i32 ?我缺少什么?我该怎么做才能让它返回id i32 ?我在这里关注文档: https://docs.diesel.rs/diesel/fn.insert_into.html 告诉他可以返回这样的价值观:

    let inserted_names = diesel::insert_into(users)
        .values(&vec![
            name.eq("Diva Plavalaguna"),
            name.eq("Father Vito Cornelius"),
        ])
        .returning(name)
        .get_results(&connection);
    assert_eq!(Ok(vec!["Diva Plavalaguna".to_string(), "Father Vito Cornelius".to_string()]), inserted_names);
    
    0 回复  |  直到 4 年前
        1
  •  1
  •   kotatsuyaki    4 年前

    The documentation of RunQueryDsl::execute 指示返回值是受影响的行数, 它自然地通过使用无符号类型来表示 usize 。 如果你真的想 i32 相反,您可以自己强制转换返回值。

    推荐文章