.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 | 用此模型数据库的适当方言编写的 SQL 字符串。允许模板语法,(例如 ? , $1 ) 确切的样式取决于底层数据库适配器。(请参阅下面的示例。) |
|
2 | valuesToEscape | 一个动态的、不可信的字符串数组,用于使用此模型数据库的适当模板语法 SQL 转义和注入到 SQL 字符串中。(如果您没有要注入的动态值,则只需在此处使用空数组。) | |
3 | done | 一个回调函数,当查询成功完成时或适配器遇到错误时将触发此函数。 |
参数 | 类型 | 详细信息 | |
---|---|---|---|
1 | err | 发生的错误,或者如果没有错误,则为虚假值。(此错误的精确格式取决于您传入的 SQL 查询和您正在使用的数据库适配器。请参阅下面的示例以获取相关文档的链接。) | |
2 | rawResult | 来自适配器的原始结果。(此原始结果数据的精确格式取决于您传入的 SQL 查询和您正在使用的数据库适配器。请参阅下面的示例以获取相关文档的链接。) |
请记住,用法和结果数据会因您发送的 SQL 查询和您正在使用的适配器而异。下面,您将找到两个示例:一个用于 PostgreSQL,另一个用于 MySQL。
直接与 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();
});
假设 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();
});
req
)