我想创建动态预处理语句,每个部分都是动态的,值,表和WHERE部分。
我使用nodejs + PostgreSQL和pg模块与PostgreSQL交谈。 pg模块提供了与node.js不同的语法,但我猜原理是一样的。这是基于官方示例here
//dynamic that can change
let select = 'name , email, age';
let table = 'user';
let where = 'id=$1 AND gender=$2';
let values = [1,'female'];
//prepare
const query = {
// give the query a unique name
name: 'fetch-user',
text: 'SELECT' + select + 'FROM' + table + 'WHERE' + where,
values: values
}
//execute
client.query(query)
.then(res => console.log(res.rows[0]))
.catch(e => console.error(e.stack))
我想知道这是否有意义,表现明智。
我红了documentation,据我所知,通过准备好陈述的所有部分都是动态的,那么规划可能不那么有效,或根本没有效果。
我该怎么办?我应该保留这种动态语法吗?或者它没有任何意义,所以我必须创建多个预准备语句并将它们用于不同的表?
由于
答案 0 :(得分:1)
这里应该没有性能问题。 "动态" SQL的一部分只是一个你传递给查询对象的字符串,所以要考虑的唯一性能就是解析text属性。您正在为数据库传递一份完整的语句;它解析不同变量的nodejs提出查询对象的文本属性。