为什么在插入记录时使用 return id
why the return id was usize when inserting record
我正在使用 rust rustc 1.59.0 (9d1b2106e 2022-02-23)
diesel diesel = { version = "1.4.8", features = ["postgres","64-column-tables","chrono","serde_json"] }
将记录插入 PostgreSQL 13 数据库,我想做的是在插入操作后获取插入的记录 ID。这是 Rust 代码的一部分,现在看起来像:
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();
这是我在 rust 中的 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
数据类型。为什么 return unsize
数据类型不是 i32
?我缺少什么?我应该怎么做才能使它 return 成为 i32
的 id?我从这里开始关注文档:https://docs.diesel.rs/diesel/fn.insert_into.html 告诉我可以 return 他的价值是这样的:
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);
The documentation of RunQueryDsl::execute
表示return值为受影响的行数,
这自然是用无符号类型 usize
表示的。
如果您真的想要 i32
,请自行转换 return 值。
我正在使用 rust rustc 1.59.0 (9d1b2106e 2022-02-23)
diesel diesel = { version = "1.4.8", features = ["postgres","64-column-tables","chrono","serde_json"] }
将记录插入 PostgreSQL 13 数据库,我想做的是在插入操作后获取插入的记录 ID。这是 Rust 代码的一部分,现在看起来像:
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();
这是我在 rust 中的 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
数据类型。为什么 return unsize
数据类型不是 i32
?我缺少什么?我应该怎么做才能使它 return 成为 i32
的 id?我从这里开始关注文档:https://docs.diesel.rs/diesel/fn.insert_into.html 告诉我可以 return 他的价值是这样的:
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);
The documentation of RunQueryDsl::execute
表示return值为受影响的行数,
这自然是用无符号类型 usize
表示的。
如果您真的想要 i32
,请自行转换 return 值。