Node-postgres:命名参数查询(nodejs)
Node-postgres: named parameters query (nodejs)
出于实际原因,我曾在 SQL 查询中命名我的参数,例如 php 和 PDO。
我可以在 node-postgres 模块中使用命名参数吗?
目前,我在互联网上看到许多示例和文档显示如下查询:
client.query("SELECT * FROM foo WHERE id = AND color = ", [22, 'blue']);
但这也是正确的吗?
client.query("SELECT * FROM foo WHERE id = :id AND color = :color", {id: 22, color: 'blue'});
或这个
client.query("SELECT * FROM foo WHERE id = ? AND color = ?", [22, 'blue']);
我问这个是因为编号参数 $n
在动态构建查询的情况下对我没有帮助。
我一直在使用 nodejs 和 postgres。我通常执行这样的查询:
client.query("DELETE FROM vehiculo WHERE vehiculo_id= ", [id], function (err, result){ //Delete a record in de db
if(err){
client.end();//Close de data base conection
//Error code here
}
else{
client.end();
//Some code here
}
});
有一个 library 可以满足您的要求。方法如下:
var sql = require('yesql').pg
client.query(sql("SELECT * FROM foo WHERE id = :id AND color = :color")({id: 22, color: 'blue'}));
QueryConvert 来拯救。它将采用参数化的 sql 字符串和一个对象,并将其转换为符合 pg 的查询配置。
type QueryReducerArray = [string, any[], number];
export function queryConvert(parameterizedSql: string, params: Dict<any>) {
const [text, values] = Object.entries(params).reduce(
([sql, array, index], [key, value]) => [sql.replace(`:${key}`, `$${index}`), [...array, value], index + 1] as QueryReducerArray,
[parameterizedSql, [], 1] as QueryReducerArray
);
return { text, values };
}
用法如下:
client.query(queryConvert("SELECT * FROM foo WHERE id = :id AND color = :color", {id: 22, color: 'blue'}));
不完全是 OP 所要求的。但您也可以使用:
import SQL from 'sql-template-strings';
client.query(SQL`SELECT * FROM unicorn WHERE color = ${colorName}`)
它结合使用标签函数和模板文字来嵌入值
出于实际原因,我曾在 SQL 查询中命名我的参数,例如 php 和 PDO。
我可以在 node-postgres 模块中使用命名参数吗?
目前,我在互联网上看到许多示例和文档显示如下查询:
client.query("SELECT * FROM foo WHERE id = AND color = ", [22, 'blue']);
但这也是正确的吗?
client.query("SELECT * FROM foo WHERE id = :id AND color = :color", {id: 22, color: 'blue'});
或这个
client.query("SELECT * FROM foo WHERE id = ? AND color = ?", [22, 'blue']);
我问这个是因为编号参数 $n
在动态构建查询的情况下对我没有帮助。
我一直在使用 nodejs 和 postgres。我通常执行这样的查询:
client.query("DELETE FROM vehiculo WHERE vehiculo_id= ", [id], function (err, result){ //Delete a record in de db
if(err){
client.end();//Close de data base conection
//Error code here
}
else{
client.end();
//Some code here
}
});
有一个 library 可以满足您的要求。方法如下:
var sql = require('yesql').pg
client.query(sql("SELECT * FROM foo WHERE id = :id AND color = :color")({id: 22, color: 'blue'}));
QueryConvert 来拯救。它将采用参数化的 sql 字符串和一个对象,并将其转换为符合 pg 的查询配置。
type QueryReducerArray = [string, any[], number];
export function queryConvert(parameterizedSql: string, params: Dict<any>) {
const [text, values] = Object.entries(params).reduce(
([sql, array, index], [key, value]) => [sql.replace(`:${key}`, `$${index}`), [...array, value], index + 1] as QueryReducerArray,
[parameterizedSql, [], 1] as QueryReducerArray
);
return { text, values };
}
用法如下:
client.query(queryConvert("SELECT * FROM foo WHERE id = :id AND color = :color", {id: 22, color: 'blue'}));
不完全是 OP 所要求的。但您也可以使用:
import SQL from 'sql-template-strings';
client.query(SQL`SELECT * FROM unicorn WHERE color = ${colorName}`)
它结合使用标签函数和模板文字来嵌入值