gpt4 book ai didi

postgresql - 使用 Diesel 执行插入或更新

转载 作者:行者123 更新时间:2023-11-29 07:56:07 27 4
gpt4 key购买 nike

我正在尝试使用 Diesel 执行插入或更新使用 PostgreSQL。

我试过:

diesel::insert_into($table::table).values(&objects).on_conflict($table::id).do_update().set(&objects).execute(conn).unwrap();

哪里objectsstd::vec::Vec<Struct> - 导致编译器错误:

^^^ the trait 'diesel::query_builder::AsChangeset' is not implemented for '&std::vec::Vec<Struct>'

有一个on_conflict_do_nothing()在查询生成器中,但我似乎找不到类似 on_conflict_do_update() 的内容或 on_conflict_do_replace() .

最佳答案

Diesel 1.3.3's documentation已经有使用更新插入的示例:

为冲突设置特定值

diesel::insert_into(users)
.values(&user2)
.on_conflict(id)
.do_update()
.set(name.eq("I DONT KNOW ANYMORE"))
.execute(&conn);

设置 AsChangeset 冲突结构

diesel::insert_into(users)
.values(&user2)
.on_conflict(id)
.do_update()
.set(&user2)
.execute(&conn);

使用 excluded 获取被拒绝的值

diesel::insert_into(users)
.values(&vec![user2, user3])
.on_conflict(id)
.do_update()
.set(name.eq(excluded(name)))
.execute(&conn)

IncompleteDoUpdate::set 采用任何实现 AsChangeset 的值,这&Vec<T>才不是。因此将它作为参数传递给 set 是无效的.

关于postgresql - 使用 Diesel 执行插入或更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47626047/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com