我要使用 if($(this).hasClass("home")) {
$("body").addClass("home");
} else if($(this).hasClass("tasks")) {
$("body").addClass("tasks");
} else if($(this).hasClass("roadmap")) {
$("body").addClass("roadmap");
} else if($(this).hasClass("staff")) {
$("body").addClass("staff");
} else if($(this).hasClass("timesheet")) {
$("body").addClass("timesheet");
} else if($(this).hasClass("global-tasks")) {
$("body").addClass("global-tasks");
} else if($(this).hasClass("deleted-tasks")) {
$("body").addClass("deleted-tasks");
}
更新用户模型中的列,目前我已经拥有了
node-postgres
所以我可以做到
async function update_user_by_email(value, column, email){
const sql = format('UPDATE users SET %I = $1, WHERE email = $2', column);
await pool.query(sql, [value, email]);
}
但是,如果我想更新多个列和值,则此刻我的工作效率很低,并且将该方法调用x次(即每个查询)
await update_user_by_email(value, column_name, email_address);
如何仅通过一次调用数据库就可以生成它。
谢谢
答案 0 :(得分:1)
您在这里有几个选择:
node-postgres允许您创建queries based on prepared statements。 (这基于本机pg-sql prepared statements)。
这些是recommended by postgres for populating a table的使用选项,它们是使用其copy
命令的辅助选择。您最终将执行更多的SQL语句(可能每行一个),但是准备好的语句的优点应该可以在一定程度上抵消这一点。
您还可以将其与transactions结合使用,上面的postgres“填充”链接中也提到了这一点。
另一个选项是另一个名为pg-promise (specifically helpers)的库所采用的方法。 pg-promise帮助程序库实际上为批量插入/更新语句构建sql语句(作为字符串)。这样,您可以使用一条语句来一次更新/插入数千行。
通过直接从information_schema
tables
和{{1}中提取结构数据,也可以(相对容易)自定义构建自己的sql helper或补充pg-promise。 }}表。
关于pg-promise的更繁琐的事情之一是必须为其提供所有列名(有时还包括定义,默认值等),如果您正在处理数十个或数百个单独的表,则会自动生成直接从数据库本身获取的信息可能更简单,更可靠(您不必在每次更改数据库时都更新列名数组)
注意:您不需要,只需使用pg-promise即可提交其助手库生成的查询。就我个人而言,我更喜欢node-postgres来进行实际的数据库通信,并且通常仅使用pg-promise帮助程序库来构建这些批量SQL语句。
注意2:值得注意的是pg-promise编写了自己的SQL注入保护(通过在值中转义单引号和在表/列名中转义双引号)。在第三种选择中需要做同样的事情。而数据库服务器本身就可以保护准备好的语句免受sql注入。