.query()
從 Sails v1.0 開始,此方法已被棄用。 請改用
Model.getDatastore().sendNativeQuery()
,這個方法的新版本標準化了 SQL escape bindings 的格式,並完整支援.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 escape 並使用適用於此模型資料庫的範本語法注入到 SQL 字串中。(如果您沒有要注入的動態值,則只需在此處使用空陣列。) | |
3 | done | 一個回呼函式,將在查詢成功完成時或轉接器遇到錯誤時觸發。 |
參數 | 類型 | 詳細資訊 | |
---|---|---|---|
1 | err | 發生的錯誤,如果沒有錯誤,則為 falsy 值。(此錯誤的確切格式取決於您傳入的 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();
});