Rust Diesel sql_query 插入带有返回的示例

Rust Diesel sql_query Insert example with Returning

我正在尝试使用 Diesel sql_query 和 return 插入记录的 ID 进行插入,但出现错误

这是我的代码

let demo_id: Vec<i32> = sql_query("insert into demo (demoname, description, demovalue) values (?, ?, 2) returning demoid")            
            .bind::<Text, _>("Demo1")
            .bind::<Text, _>("Demo2")
            .get_results(&conn).unwrap();

获取错误

the trait `QueryableByName<Pg>` is not implemented for `i32`

提前致谢

正如 sql_query 的文档中所说:

Unlike most queries in Diesel, sql_query will deserialize its data by name, not by index. That means that you cannot deserialize into a tuple, and structs which you deserialize from this function will need to have #[derive(QueryableByName)]

因此,您必须为要反序列化的数据创建一个结构:


#[derive(QueryableByName)]
struct InsertedRowId {
    #[sql_type = "Integer"]
    demoid: i32
}

// Then:

let demo_id: Vec<InsertedRowId> = sql_query("insert into demo (demoname, description, demovalue) values (, , 2) returning demoid")            
            .bind::<Text, _>("Demo1")
            .bind::<Text, _>("Demo2")
            .get_results(&conn).unwrap();

请注意,查询中返回的列的名称必须与相应的结构字段同名。

另请参阅 QueryableByName 的文档。

最后 - 请注意,对于 postgresql,查询中的占位符是使用语法 </code>、<code>

指定的