[TIL] Sequelize ORM
今日のスプリントは本当に疲れました.まず,従来の噴霧器のように文書にTODOを表示するのではなく,テスト用例に基づいてどこに何が書かれているかを推定する.ORMのマッピングが何であるかを正しく理解していないまま盲目的に使用する場合は、公式文書のコードをコピーしていますが、何をしているのか分からないのでさらに困難です.しかしやはり小細工(テストデータ手動入力)を使って、まずテストに合格させてもらいましたが、私が書いたものよりも書いた煩わしいコードに近いように見え、理解して書いたとは思えないので疲れました.しかし、スプレッドシートでは、エンジニアがコードの作成過程を説明しながら説明を聞いて理解しました.Modelsのファイルのみを修正した場合、テスト例が合格しなかったので、移行ファイルに触ってみましたが、合格しましたが、これが正しいかどうか疑問です.移行する前にdbにテーブルは存在せず、テーブルを生成するには移行する必要があります.この内容は実は正式なファイルの中にありますが、あまりにも急いでいて、サンプルコードだけを見て、説明を見たことがありません.ブログを書くために、改めてドキュメントを見たところ、Migrationの部分に説明がありました.いつ正式な書類をすばやく正確に読むことができますか...
Today I Learned
ORM
Object Relational Mapping
自動マッピングOOPオブジェクトを実装するクラスとRDBのテーブル
利点:クエリー文を熟知する必要がなく、データベースを間接的に操作できます.オブジェクト向けのコードはより直感的です.RDBMSへの依存性を低減する.
欠点:プロジェクトが複雑であればあるほど、設計が困難になり、不適切な実施は速度の低下や一貫性の崩壊を招く.
Sequelize
Promiseベースのノード.js ORM
Postgres、MySQL、MariaDB、SQLite、Microsoft SQLをサポート
1.Seqleizeの設定
npm install --save sequelize
npm install --save-dev sequelize-cli
init
コマンドを使用して新規プロジェクトを作成npx sequelize-cli init
自動生成
config
・models
・migrations
・seeders
・フォルダconfig/config.json
に接続するデータベースやユーザー名、パスワードなどを設定できます.使用するDBは直接生成する必要があります.(MySQLラーメン
create database db_name;
)2.モデルの作成
CLIを使用してモデルを作成できます.
モデルはデータベース内のテーブルの抽象モデルであり、Sequeizeでは継承
Model
のクラスを指す.モデル名は単数で作成されますが、テーブル名は自動的に複数に変更されます.
name
:テーブル名attributes
:表欄npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
user.js
賈models
フォルダに作成// models/user.js
'use strict';
const { Model } = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class user extends Model {
static associate(models) {
// define association here
}
};
user.init({
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING
}, {
sequelize,
modelName: 'user',
});
return user;
};
migrations
フォルダに新しい移行ファイルを作成'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('users');
}
};
モデルファイルのみを変更しても、実際のデータベースには変更は反映されません.移行ファイルも一緒に変更します.
空の移行ファイルに直接変更を作成できます.
npx sequelize-cli migration:generate --name migration-name
// migration skeletion
module.exports = {
up: (queryInterface, Sequelize) => {
// logic for transforming into the new state
},
down: (queryInterface, Sequelize) => {
// logic for reverting the changes
}
}
// up, down returns a Promise
db:migrate
データベースでテーブルを生成するには、コマンドを使用します.npx sequelize-cli db:migrate
npx sequelize-cli db:migrate:undo
db:migrate:undo
クマンドは最寄りの移行状態に戻るReference
この問題について([TIL] Sequelize ORM), 我々は、より多くの情報をここで見つけました https://velog.io/@alexjlee/TIL-Sequelize-ORMテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol