Sequelize 學習筆記

參考連結

官方網站

安裝

npm install --save sequelize

or

yarn add sequelize --save

以下手動安裝:

npm install --save pg pg-hstore
npm install --save mysql2
npm install --save mariadb
npm install --save sqlite3
npm install --save tedious # Microsoft SQL Server

or

yarn add pg pg-hstore --save
yarn add mysql2 --save
yarn add mariadb --save
yarn add sqlite3 --save
yarn add tedious # Microsoft SQL Server --save

Migration

參考官方網站

安裝 Migration CLI

npm install --save sequelize-cli

or

yarn add sequelize-cli --save

快速開始

參考官方網站

npx sequelize-cli init
  • 會自動建立以下資料夾:
    • config: 連接資料庫的設定
    • models: 這個專案 Models 的存放位置
    • migrations: Migration 放置處
    • seeders: seeds 檔案
  • 請把以下的 operationAliases 刪掉

config.json

"development":{
"username": "root",
"password": null,
"database": "database_development",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
}

建立 migration

參考官方網站

npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
  • name: Model 名稱
  • attributes: 欄位屬性

會做以下的事:

  • 建立一個 user model
  • 在 migration 資料夾,建立一個 migration 檔案,名稱像是 XXXXXXXXXXXXXX-create-user.js

執行 migration

參考官方網站

npx sequelize-cli db:migrate

取消 migration

參考官方網站

  • 取消最新一個 migration
npx sequelize-cli db:migrate:undo
  • 取消全部的 migration, 然後重新 migrate 到指定的檔案
npx sequelize-cli db:migrate:undo:all --to XXXXXXXXXXXXXX-create-posts.js

變更設定檔位置,名稱

如果:

  • 你想要重新定義 migration, models, seeders, 或 config 的資料夾位置
  • 你想要重新命名 config.json, 比如說, database.json

那:

  • 建立 .sequelizerc 檔案

    touch .sequelizerc
  • 範例格式

    const path = require('path');

    module.exports = {
    'config': path.resolve('config', 'database.json'),
    'models-path': path.resolve('db', 'models'),
    'seeders-path': path.resolve('db', 'seeders'),
    'migrations-path': path.resolve('db', 'migrations')
    }

以上的設定會告訴 CLI

  • 使用 config/database.json 為設定檔
  • 使用 `db/models/ 為 models 的資料夾
  • 使用 db/seeders 為 seeders 資料夾
  • 使用 db/migrations 為 migration 資料夾

有時我們會需要更改 config 檔案副檔名, 因為我們需要一些 json 無法提供的功能, 例如:

const fs = require('fs');
production: {
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
host: process.env.DB_HOSTNAME,
dialect: 'mysql',
dialectOptions: {
ssl: {
ca: fs.readFileSync(__dirname + '/mysql-ca-master.crt')
}
}
};

這時我們可以在 .sequelizerc 檔案中修改

const path = require('path');

module.exports = {
'config': path.resolve('config', 'config.js')
}

最後別忘了修改 /models/index 中, config 的路徑

在 model 中增加 method

'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING
}, {});
User.associate = function(models) {
// associations can be defined here
};
User.prototype.useInstance = function () {
console.log('This is for new instance way');
};
User.useStatic = function () {
console.log('This is for static way');
};
return User;
};

使用 async/await

直接 await method 就可

(async () => {
let result = await Data.findAll({
attributes: [
'host',
'upstream_cache_status',
[Sequelize.fn('COUNT', Sequelize.col('request')), 'requests'],
],
group: ['host', 'upstream_cache_status']
});
console.log(result)
})();
Cloud Functions 上的監控與紀錄 Cloud IAM - 初探

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×