编辑页面

.query()

从 Sails v1.0 开始,此方法已弃用。 请改为使用 Model.getDatastore().sendNativeQuery(),这是此方法的新版本,它标准化了 SQL 转义绑定的格式,并完全支持 .exec() 和基于 Promise 的使用。

使用指定的模型数据存储执行原始 SQL 查询。

SomeModel.query(sql, valuesToEscape, function(err, rawResult) {

});

警告: 与其他 Waterline 模型方法不同,.query() 不支持基于 Promise 的使用或 .exec() 的使用。换句话说,它不使用 Waterline 的正常延迟对象机制。相反,它提供对底层数据库驱动程序的直接访问。

用法

#

.query() 仅适用于配置为使用 SQL 数据库(例如 PostgreSQL 或 MySQL)的 Sails/Waterline 模型。它的目的是执行原始 SQL 查询。请注意,确切的用法和结果格式因适配器而异,因此您需要参考底层数据库驱动程序的文档。(请参阅下面的几个简单示例以帮助您入门。)

参数 类型 详细信息
1 sql String 用此模型数据库的适当方言编写的 SQL 字符串。允许模板语法,(例如 ?, $1) 确切的样式取决于底层数据库适配器。(请参阅下面的示例。)
2 valuesToEscape Array 一个动态的、不可信的字符串数组,用于使用此模型数据库的适当模板语法 SQL 转义和注入到 SQL 字符串中。(如果您没有要注入的动态值,则只需在此处使用空数组。)
3 done Function 一个回调函数,当查询成功完成时或适配器遇到错误时将触发此函数。
回调
#
参数 类型 详细信息
1 err Error? 发生的错误,或者如果没有错误,则为虚假值。(此错误的精确格式取决于您传入的 SQL 查询和您正在使用的数据库适配器。请参阅下面的示例以获取相关文档的链接。)
2 rawResult Ref? 来自适配器的原始结果。(此原始结果数据的精确格式取决于您传入的 SQL 查询和您正在使用的数据库适配器。请参阅下面的示例以获取相关文档的链接。)

示例

#

请记住,用法和结果数据会因您发送的 SQL 查询和您正在使用的适配器而异。下面,您将找到两个示例:一个用于 PostgreSQL,另一个用于 MySQL。

PostgreSQL 示例
#

直接与 pg 通信,这是一个用于与 PostgreSQL 数据库通信的 NPM 包

Pet.query('SELECT pet.name FROM pet WHERE pet.name = $1', [ 'dog' ] ,function(err, rawResult) {
  if (err) { return res.serverError(err); }

  sails.log(rawResult);
  // (result format depends on the SQL query that was passed in, and the adapter you're using)

  // Then parse the raw result and do whatever you like with it.

  return res.ok();

});
MySQL 示例
#

假设 Pet 模型配置为使用 sails-mysql 适配器,则以下代码将直接与 mysql 通信,这是一个用于与 MySQL 数据库通信的 NPM 包

Pet.query('SELECT pet.name FROM pet WHERE pet.name = ?', [ 'dog' ] ,function(err, rawResult) {
  if (err) { return res.serverError(err); }

  sails.log(rawResult);
  // ...grab appropriate data...
  // (result format depends on the SQL query that was passed in, and the adapter you're using)

  // Then parse the raw result and do whatever you like with it.

  return res.ok();

});

备注

#
  • 此方法仅适用于 SQL 数据库。要访问原始 MongoDB 集合,请使用 .native().
  • 此方法不支持.exec().then(),并且返回 Promise。如果您想“Promise 化”.query(),请查看 这个

是否缺少内容?

如果您发现我们遗漏了某些内容或可以改进的地方,请遵循 此链接 并向 sails 仓库提交拉取请求。一旦我们合并它,更改将在下次网站部署时反映在网站上。

参考

参考