首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Vlang中进行插补

如何在Vlang中进行插补
EN

Stack Overflow用户
提问于 2021-02-20 21:22:21
回答 1查看 121关注 0票数 0

目前,ORM for V只支持selectupdateinsert。我想做一个更复杂的upsert,像这样:

代码语言:javascript
复制
INSERT INTO Settings (Key, Value)
VALUES (?0, ?1)
ON CONFLICT(Key)
DO UPDATE
SET Key = ?0,
    Value = ?1;`

但是看起来从医生那里并没有进行这样的更新的机会。因此,我需要自己清理插入/更新的值。

是否有一种直接使用变量执行直接SQL的方法?我是不是遗漏了什么?

我的另一个选择是:

代码语言:javascript
复制
setting := Settings {
    key: key
    value: value
}
sql r.db {
    insert setting into Settings
}
sql r.db {
    update Settings set value = value where key == key
}

虽然上面的工作方式不太优雅,但需要对DB进行两次调用。有什么方法可以直接查询参数吗?

EN

回答 1

Stack Overflow用户

发布于 2022-02-12 03:59:01

vlang库(而不是Orm)有一种方法,它可以对db执行原始SQL并返回原始行数据。

您可以使用这种堆叠溢出中的信息创建upsert查询,并将其作为针对DB的字符串执行。

可能是这样的(您必须使用特定的数据库来测试它,直到它运行为止):

代码语言:javascript
复制
r.db.exec("UPDATE Settings SET value = 'value' WHERE id = 2;
INSERT INTO Settings(key, value) SELECT 2, 'value' WHERE changes() = 0;")

在生产中不使用这种方法。不幸的是,exec函数没有对输入进行santize或传递参数化的值。这意味着默认情况下您将容易受到sql注入的攻击。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66296688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档