Ron*_*nny 3 postgresql rust rust-diesel
我正在尝试使用Diesel和PostgreSQL 执行插入或更新.
我试过了:
diesel::insert_into($table::table).values(&objects).on_conflict($table::id).do_update().set(&objects).execute(conn).unwrap();
Run Code Online (Sandbox Code Playgroud)
其中objects是a std::vec::Vec<Struct>- 导致编译器错误:
^^^ the trait 'diesel::query_builder::AsChangeset' is not implemented for '&std::vec::Vec<Struct>'
Run Code Online (Sandbox Code Playgroud)
有一个on_conflict_do_nothing()查询生成器,但我似乎无法找到类似on_conflict_do_update()或on_conflict_do_replace().
She*_*ter 11
Diesel 1.3.3的文档已经有使用upsert的示例:
设置冲突的具体价值
diesel::insert_into(users)
.values(&user2)
.on_conflict(id)
.do_update()
.set(name.eq("I DONT KNOW ANYMORE"))
.execute(&conn);
Run Code Online (Sandbox Code Playgroud)
AsChangeset在冲突上设置struct
diesel::insert_into(users)
.values(&user2)
.on_conflict(id)
.do_update()
.set(&user2)
.execute(&conn);
Run Code Online (Sandbox Code Playgroud)
使用excluded来获取拒绝值
diesel::insert_into(users)
.values(&vec![user2, user3])
.on_conflict(id)
.do_update()
.set(name.eq(excluded(name)))
.execute(&conn)
Run Code Online (Sandbox Code Playgroud)
IncompleteDoUpdate::set需要实现任意值AsChangeset,这&Vec<T>不.因此将它作为参数传递给它是无效的set.
| 归档时间: |
|
| 查看次数: |
1316 次 |
| 最近记录: |