Rust/Diesel: How to query and insert into postgres tables which have uuid
我有Diesel生成的以下架构:
1 2 3 4 5 | table! { user (id) { id -> Uuid, name -> Text } |
和关联的模型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | use diesel::{ self, Queryable, Insertable, }; use diesel::prelude::*; use diesel::sql_types::Uuid; use super::schema::user; #[derive(Queryable)] pub struct User { pub id: Uuid, pub name: String, } impl User { pub fn get(id: i32, connection: &PgConnection) -> Vec<User> { user::table.load::<User>(connection).unwrap() } } |
当我尝试编译以下内容时出现错误:
1 2 | 21 | user::table.load::<User>(connection).unwrap() | ^^^^ the trait `diesel::Queryable<diesel::sql_types::Uuid, diesel::pg::Pg>` is not implemented for `diesel::sql_types::Uuid` |
如果我尝试插入,则会收到类似的错误消息,提示未实现
这可能是我的依赖项有问题还是我可能忘记将其添加到模型中的问题?
1 2 3 4 5 6 7 8 9 10 11 12 13 | [dependencies] rocket ="0.4.0-rc.1" serde ="1.0" serde_derive ="1.0" serde_json ="1.0" diesel = { version ="1.0.0", features = ["postgres","uuid"] } r2d2 ="*" r2d2-diesel ="*" [dependencies.rocket_contrib] version ="0.4.0-rc.1" default-features = false features = ["json","diesel_postgres_pool","uuid"] |
结构中的类型必须是Rust类型而不是SQL类型,特别是uuid板条箱中的
1 2 3 4 5 | #[derive(Queryable)] pub struct User { pub id: uuid::Uuid, pub name: String, } |
这个问题也花了很多时间。从Diesel 1.4.5开始,您可以添加
您的
1 2 | uuid = { version ="0.8.2", features = ["serde","v4"] } diesel = { version ="1.4.5", features = ["chrono","postgres","r2d2","uuidv07"] } |
来源:https://github.com/diesel-rs/diesel/issues/2348
注意:另外,就像@canab所说的那样,结构上的