sequelizeとは
Node.jsにはデータベースを利用するためのパッケージがたくさん存在します。
しかし、データベースを扱うにはSQLというデータベースを操作する言語が必要になります。
sequelizeというパッケージを使えば、SQLを知らなくても、Node.jsでデータベースを利用することができます。
さらに詳しく
sequlizeは公式によるとORM(Object-relational mapping, オブジェクト関係マッピング)と呼ばれるものらしいです。
以下は引用です。
オブジェクト指向の概念とリレーショナルデータベースの概念を橋渡しする役割がORMです。オブジェクト指向とリレーショナルデータベースの相性はそれぞれの概念が異なるため、相性が良くありません。なぜなら、オブジェクト指向では、データをオブジェクトとして扱うのですが、リレーショナルデータベースではデータを2次元の表として扱うためギャップが生じてしまいます。ORMを利用することによって、オブジェクトとデータベース問い合わせの相互変換を行います。
引用:ORMとは?
sequlizeはPostgreSQL、MySQL、MariaDB、SQLite、MicrosoftSQLServerに対応しているそうです。
sequlizeを利用してみる。
今回はsequlizeでpostgreSQLを利用してみます。
前提として以下を完了しておいてください。
① Node.jsのイントール
② Yarnのインストール
③ PostgreSQLのインストール 参考:https://lets.postgresql.jp/map/install
sequlizeを使う前にデータベースを作っておきます。
PostgreSQLのpsqlターミナルを起動し、以下のコマンドを入力してください。
$ create database rensyu;
データベース名は何でも構いません。
ここではrensyuとしておきます。
データベースが完成したら、sequelizeのインストールを行なっていきます。
以下のコマンドを入力してください。
$ yarn add sequelize
$ yarn add pg
$ yarn add pg-hstore
参照:sequelize入門
インストールが終わったら、
sequelizeを利用するためのJSファイルを準備し、
そのファイル内に以下を書き込みます。
今回はシンプルにIDと名前と年齢だけのデータベースを作っていきます。
'use strict';constSequelize=require('sequelize');constsequelize=newSequelize('postgres://postgres:postgres@localhost/rensyu',{logging:false,define:{freezeTableName:true,timestamps:true}});constPost=sequelize.define('Post',{id:{type:Sequelize.INTEGER,autoIncrement:true,primaryKey:true},name:{type:Sequelize.STRING},age:{type:Sequelize.INTEGER}});Post.sync();module.exports=Post;
解説をしていきます。
constsequelize=newSequelize('postgres://postgres:postgres@localhost/rensyu',{logging:false,define:{freezeTableName:true,timestamps:true}});
これは、sequelizeのインスタンスを作成しています。
その際に、接続するデータベースを先ほど作成したものに設定しています。
postgresql://{ユーザー名}:{パスワード}@{ホスト名}/{データベース名}というようになっています。自分で作ったPostgreSQLのユーザー名やパスワードを利用してください。
loggingはデータベースに接続する際、コンソールログを行わない設定です。
defineのfreezeTableName: trueはテーブル名を固定する設定です。
timestampは自動的にcreatedAtという作成日時とupdatedAtという更新日時を自動的に追加してくれる設定です。
constPost=sequelize.define('Post',{id:{type:Sequelize.INTEGER,autoIncrement:true,primaryKey:true},name:{type:Sequelize.STRING},age:{type:Sequelize.INTEGER}});
こちらはデータベースのテーブルやデータを定義し、Postというオブジェクトに代入しています。
'Post'はテーブル名です。
id, name, ageはテーブルの列です。
それぞれに数字であるのか、文字であるのかなどの設定がされています。
idのprimaryKey: trueというのは、データベースを操作する上で参照の対象となる主キーを、idに設定しているという意味です。
Post.sync();module.exports=Post;
Post.sync();は、定義したPostというオブジェクトをデータベースに適用して同期を取っています。
module.exports = Post;は、オブジェクト自体をモジュールとして公開しています。
この他にもいろいろな設定オプションがあります。
https://sequelize.org/master/manual/getting-started.html
それでは、以上のデータベースを使ってみましょう。
適当なファイルを用意し、以下のような記述をします。
constPost=require('./post');Post.create({name:name,age:age});
const Post = require('./post');はモジュールをインストールしています。
Post.createでデータベースにデータを保存しています。
あとは、EJSやPugなどのテンプレートエンジンを使えば、nameとageに好きな値を入れて保存ができます。
以上です。