クエリインターフェース
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 を参照してください。