メインコンテンツへスキップ
バージョン: v6 - 安定版

クエリインターフェース

Sequelize のインスタンスは、方言に依存しない方法でデータベースと通信するために、クエリインターフェースと呼ばれるものを使用します。このマニュアルで学習したメソッドのほとんどは、クエリインターフェースのいくつかのメソッドの助けを借りて実装されています。

したがって、クエリインターフェースのメソッドは低レベルなメソッドです。Sequelize のより高レベルな API で別の方法が見つからない場合にのみ、これらを使用する必要があります。もちろん、これらは直接 raw クエリを実行する(つまり、手動で SQL を記述する)よりも、まだ高レベルです。

このガイドではいくつかの例を示していますが、クエリインターフェースのすべての機能と各メソッドの詳細な使用方法については、QueryInterface API を参照してください。

クエリインターフェースの取得

以降、Sequelize インスタンスで使用可能な QueryInterface クラスのシングルトンインスタンスを `queryInterface` と呼びます。

const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize(/* ... */);
const queryInterface = sequelize.getQueryInterface();

テーブルの作成

queryInterface.createTable('Person', {
name: DataTypes.STRING,
isBetaMember: {
type: DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
});

生成されたSQL(SQLiteを使用)

CREATE TABLE IF NOT EXISTS `Person` (
`name` VARCHAR(255),
`isBetaMember` TINYINT(1) NOT NULL DEFAULT 0
);

注記: 代わりにモデルを定義し、より高レベルのアプローチである `YourModel.sync()` を呼び出すことを検討してください。

テーブルへの列の追加

queryInterface.addColumn('Person', 'petName', { type: DataTypes.STRING });

生成されたSQL(SQLiteを使用)

ALTER TABLE `Person` ADD `petName` VARCHAR(255);

列のデータ型の変更

queryInterface.changeColumn('Person', 'foo', {
type: DataTypes.FLOAT,
defaultValue: 3.14,
allowNull: false,
});

生成されたSQL(MySQLを使用)

ALTER TABLE `Person` CHANGE `foo` `foo` FLOAT NOT NULL DEFAULT 3.14;

列の削除

queryInterface.removeColumn('Person', 'petName', {
/* query options */
});

生成されたSQL(PostgreSQLを使用)

ALTER TABLE "public"."Person" DROP COLUMN "petName";

SQLiteでの列の変更と削除

SQLite は、列の直接的な変更と削除をサポートしていません。しかし、Sequelize は、これらの手順 に基づいて、バックアップテーブルを使用してテーブル全体を再作成することで、これを回避しようとします。

例えば

// Assuming we have a table in SQLite created as follows:
queryInterface.createTable('Person', {
name: DataTypes.STRING,
isBetaMember: {
type: DataTypes.BOOLEAN,
defaultValue: false,
allowNull: false,
},
petName: DataTypes.STRING,
foo: DataTypes.INTEGER,
});

// And we change a column:
queryInterface.changeColumn('Person', 'foo', {
type: DataTypes.FLOAT,
defaultValue: 3.14,
allowNull: false,
});

SQLiteに対して生成されるSQL呼び出しは以下の通りです。

PRAGMA TABLE_INFO(`Person`);

CREATE TABLE IF NOT EXISTS `Person_backup` (
`name` VARCHAR(255),
`isBetaMember` TINYINT(1) NOT NULL DEFAULT 0,
`foo` FLOAT NOT NULL DEFAULT '3.14',
`petName` VARCHAR(255)
);

INSERT INTO `Person_backup`
SELECT
`name`,
`isBetaMember`,
`foo`,
`petName`
FROM `Person`;

DROP TABLE `Person`;

CREATE TABLE IF NOT EXISTS `Person` (
`name` VARCHAR(255),
`isBetaMember` TINYINT(1) NOT NULL DEFAULT 0,
`foo` FLOAT NOT NULL DEFAULT '3.14',
`petName` VARCHAR(255)
);

INSERT INTO `Person`
SELECT
`name`,
`isBetaMember`,
`foo`,
`petName`
FROM `Person_backup`;

DROP TABLE `Person_backup`;

その他

このガイドの冒頭で述べたように、Sequelizeで使用できるクエリインターフェースには他にも多くの機能があります!実行可能な操作の完全なリストについては、QueryInterface API を参照してください。