javascript - 有没有一种方法可以更新 postgres 和节点 js 中的用户配置文件(详细信息),但每次都必须发送请求正文中的所有参数?
问题描述
我有一个这种格式的 postgres 查询: UPDATE farmer SET first_name=$1, last_name=$2, contact_no=$3, Cooperation_name=$4 WHERE verification_id=$5
但是,这将要求我在想要更新数据时发送请求正文中的所有参数,否则我将获得未包含参数的空值。
有没有办法可以在节点 js 或 postgres 或两者中编写它,这样我只在请求正文中包含我想更新的参数而不将其他值设置为 null。
解决方案
曾经遇到过类似的问题,我创建了一个函数来做到这一点。
const addComma = (len) => len > 1 ? ', ' : '';
/**
* @param {updateStmtObject} {table, fields, condition}
* @returns {string} query
*/
function createUpdateStatement(table, fields, condition){
let query = {
text: `UPDATE ${table} SET`,
values: []
}
Object.keys(fields).forEach(col => {
query.values.push(fields[col]);
query.text += `${addComma(query.values.length)} ${col} = $${query.values.length}`;
});
if (query.values.length > 0) {
if(condition){
const col = Object.keys(condition)[0];
query.values.push(condition[col]);
query.text += ` WHERE ${col} = $${query.values.length}`;
}
return query;
} else {
//No changes to be made
return null;
}
}
module.exports = {
createUpdateStatement
};
/**
* Update statement object
* @typedef {Object} updateStmtObject
* @property {string} table - Table to be updated
* @property {object} fields - An object of column_name:value pairs for the query
* @property {object} condition - column_name:value pair for update condition.
* Only single condition currently supported. Add other conditions manually.
*/
只需将其复制并粘贴到 util.js 文件或任何您可以调用它的文件中,即可动态生成 UPDATE 语句:
const { createUpdateStatement } = require('util.js');
const updateData = {first_name: 'Benz', last_name: 'Stevox'};
const query = createUpdateStatement('users', updateData, {verification_id: 5});
console.log(query);
/*
{
text: 'UPDATE users SET first_name = $1, last_name = $2 WHERE verification_id = $3',
values: [ 'Benz', 'Stevox', 5 ]
}
*/
它可能不适用于复杂的查询,但像您的示例中这样的简单语句应该可以正常工作。
推荐阅读
- azure - Azure Web 应用程序的 Maven 插件"
"不工作 - apache-spark - Spark - 如何将约 20TB 的数据从 DataFrame 写入配置单元表或 hdfs?
- python-3.x - scrapy - [twisted] NameError: name 'connect' 未定义
- laravel-5.4 - 使用未定义的常量 id - 在 laravel 5.4 中假定为 'id'
- python-3.x - python while循环在一个函数中
- javascript - 未定义索引:XAMPP 中的名称
- python - 如何在没有视图模型的情况下呈现 html 页面?
- mysql - 为什么在尝试使用命令行进入 mysql 时出现“权限被拒绝”?
- laravel - 更新现有数组laravel 5.5中的项目
- excel - 如何在 Excel 中引用过滤范围