目前,ORM for V只支持select、update和insert。我想做一个更复杂的upsert,像这样:
INSERT INTO Settings (Key, Value)
VALUES (?0, ?1)
ON CONFLICT(Key)
DO UPDATE
SET Key = ?0,
Value = ?1;`但是看起来从医生那里并没有进行这样的更新的机会。因此,我需要自己清理插入/更新的值。
是否有一种直接使用变量执行直接SQL的方法?我是不是遗漏了什么?
我的另一个选择是:
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进行两次调用。有什么方法可以直接查询参数吗?
发布于 2022-02-12 03:59:01
vlang库(而不是Orm)有一种方法,它可以对db执行原始SQL并返回原始行数据。
您可以使用这种堆叠溢出中的信息创建upsert查询,并将其作为针对DB的字符串执行。
可能是这样的(您必须使用特定的数据库来测试它,直到它运行为止):
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注入的攻击。
https://stackoverflow.com/questions/66296688
复制相似问题