我在node.js项目中看到过这个。
sequelize.query(" select * from user user.age = :: age", {替换:{年龄:20}});
为什么他使用双结肠而不是单结肠?
答案 0 :(得分:0)
看docs,你似乎需要一个冒号。可以使用冒号或匿名使用问号命名替换。 e.g。
sequelize.query("select * from user where user.age=:age", {replacements:{age:20}});
或
sequelize.query("select * from user where user.age=?", {replacements:[20]});
答案 1 :(得分:0)
哦,我想我明白了。 @chriskelly你是对的。还有一个冒号也会与RegEx匹配,另外两个冒号也会起作用。即::::年龄也被接受。
SqlString.formatNamedParameters = function(sql, values, timeZone, dialect) {
return sql.replace(/\:+(?!\d)(\w+)/g, function(value, key) {
if ('postgres' === dialect && '::' === value.slice(0, 2)) {
return value;
}
if (values.hasOwnProperty(key)) {
return SqlString.escape(values[key], false, timeZone, dialect);
} else {
throw new Error('Named parameter "' + value + '" has no value in the given object.');
}
});
};