Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用sequelize在sql中使用双冒号有什么用途?_Node.js_Sequelize.js - Fatal编程技术网

Node.js 使用sequelize在sql中使用双冒号有什么用途?

Node.js 使用sequelize在sql中使用双冒号有什么用途?,node.js,sequelize.js,Node.js,Sequelize.js,我在node.js项目中看到了这一点 sequelize.queryselect*来自用户,其中user.age=::age, {替换:{年龄:20}} 为什么他使用双冒号而不是单冒号?看看这个例子,似乎你需要一个单冒号。替换项可以使用冒号命名,也可以使用问号匿名命名。e、 g sequelize.query("select * from user where user.age=:age", {replacements:{age:20}}); 或 哦,我想我明白了@克里斯·凯利,你说得对。另外

我在node.js项目中看到了这一点

sequelize.queryselect*来自用户,其中user.age=::age, {替换:{年龄:20}}

为什么他使用双冒号而不是单冒号?

看看这个例子,似乎你需要一个单冒号。替换项可以使用冒号命名,也可以使用问号匿名命名。e、 g

sequelize.query("select * from user where user.age=:age", {replacements:{age:20}});


哦,我想我明白了@克里斯·凯利,你说得对。另外一个冒号也将与正则表达式匹配,另外两个冒号也将起作用。i、 年龄也是可以接受的

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.');
}
});
};

是的,我想是的。奇怪的是,双冒号也起作用。我在文档中找到了这个,我不明白这里的$1::varchare。数据库可能会对此添加更多限制。绑定参数不能是SQL关键字,也不能是表名或列名。它们在引用的文本/数据中也被忽略。在PostgreSQL中,如果无法从上下文$1::varchar推断类型,则可能还需要对其进行类型转换。我也看到了。一些数据库中使用了双冒号,尤其是PostgreSQL。然而,考虑到你问题的背景,我认为这肯定是一个打字错误。混乱的行为,如果它的工作无论如何-我宁愿一个错误!
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.');
}
});
};