Node.jsのSequelizeは、JavaScriptでSQLデータベースを操作するためのORM(Object-Relational Mapping)ライブラリです。
Sequelizeを使用すると、SQLクエリを直接記述することなく、JavaScriptオブジェクトとしてデータベースを操作できます。
その一方で、直接SQL分を実行したい場合には、query
メソッドを使用する必要があります。
この記事では、query
メソッドを使用して直接SQL分を実行する方法を詳しく解説します。
Sequelizeのquery
メソッドで使用するオプションについてはこちらで解説しています。
Sequelizeのセットアップ
まず、Sequelizeをプロジェクトにインストールし、データベースとの接続をセットアップします。
const Sequelize = require('sequelize');
// データベースの接続情報を設定
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql', // 使っているデータベースの種類に合わせて変更
});
queryメソッドを使用したSQLクエリの実行
query
メソッドを使用して、SQLクエリを実行できます。以下は、単純なSELECTクエリの例です。
const { QueryTypes } = require('sequelize');
sequelize.query('SELECT * FROM Users', { type: QueryTypes.SELECT })
.then((results) => {
console.log(results);
})
.catch((error) => {
console.error('クエリエラー:', error);
});
このコードでは、SELECT * FROM Users
というSQLクエリをデータベースに送信し、結果をJavaScriptオブジェクトの配列として取得します。{ type: QueryTypes.SELECT }
オプションを使用して、クエリの種類を指定しています。
また、SequelizeのPromiseベースのAPIを使用して、成功した場合とエラーが発生した場合のコールバックを提供します。
パラメーターを含むqueryメソッド
query
メソッドはパラメーターを含むSQLクエリを実行するのにも使用できます。
パラメーターはプレースホルダーとして指定し、実行時に具体的な値を渡します。以下は例です。
const username = 'john.doe';
sequelize.query('SELECT * FROM Users WHERE username = :username', {
replacements: { username },
type: QueryTypes.SELECT
})
.then((results) => {
console.log(results);
})
.catch((error) => {
console.error('クエリエラー:', error);
});
この例では、:username
というプレースホルダーを使用して、クエリに動的な値を挿入しています。
ちなみに、 query
メソッドを使用する際には、セキュリティ上の注意が必要です。
SQLインジェクション攻撃を防ぐために、ユーザーからの入力を適切にエスケープまたはサニタイズし、パラメーター化されたクエリを使用することを強くお勧めします。