使用 Sequelize 的事前準備

好用的東西,不過得多練習。

簡述

基本流程大致都是這樣:

  1. 連線到資料庫
  2. 定義 Table 的 Schema,(Sequelize 會用 Model 來稱呼)
  3. 同步到資料庫(真正新建 Table 的動作)

連線到資料庫

附註:一個 Sequelize 就代表一個資料庫,可以這樣記。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Sequelize: 用來 new 一個連線資料庫的 instance
// DataTypes: 用來設定 Schema 的內容
const { Sequelize, DataTypes } = require('sequelize');

// 基本資訊
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mariadb'
});

// 檢查連線狀態
~async function checkConnection () {
try {
await sequelize.authenticate();
console.log('Connection has been established successfully.');
} catch (error) {
console.error('Unable to connect to the database:', error);
}
}()

定義 Schema

附註:

  • Sequelize 裡會用「Model」來表示 table
  • Sequelize 預設就會有「時間軸」的欄位,不用自己寫
  • STRING 的預設值是 VARCHAR(255)
1
2
3
4
5
6
7
8
9
10
11
12
// 定義一個 User 的 table(大寫是命名慣例)
const User = sequelize.define('User', {
// 設定欄位資訊
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING
// allowNull defaults to true
}
})

詳細的結構參考下面:

String:

1
2
3
4
5
6
7
DataTypes.STRING             // VARCHAR(255)
DataTypes.STRING(1234) // VARCHAR(1234)
DataTypes.STRING.BINARY // VARCHAR BINARY
DataTypes.TEXT // TEXT
DataTypes.TEXT('tiny') // TINYTEXT
DataTypes.CITEXT // CITEXT PostgreSQL and SQLite only.
DataTypes.TSVECTOR // TSVECTOR PostgreSQL only.

Boolean:

1
DataTypes.BOOLEAN            // TINYINT(1)

Number:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DataTypes.INTEGER            // INTEGER
DataTypes.BIGINT // BIGINT
DataTypes.BIGINT(11) // BIGINT(11)

DataTypes.FLOAT // FLOAT
DataTypes.FLOAT(11) // FLOAT(11)
DataTypes.FLOAT(11, 10) // FLOAT(11,10)

DataTypes.REAL // REAL PostgreSQL only.
DataTypes.REAL(11) // REAL(11) PostgreSQL only.
DataTypes.REAL(11, 12) // REAL(11,12) PostgreSQL only.

DataTypes.DOUBLE // DOUBLE
DataTypes.DOUBLE(11) // DOUBLE(11)
DataTypes.DOUBLE(11, 10) // DOUBLE(11,10)

DataTypes.DECIMAL // DECIMAL
DataTypes.DECIMAL(10, 2) // DECIMAL(10,2)

同步到 Database

上面都只是事前準備,還沒有真正去操作資料庫,所以這一步才算是真的執行 SQL 指令。

1
2
3
4
~async function sync() {
// 根據前面定義的 Model 來同步
await sequelize.sync();
}()

如果之後想要改 Schema,就跟剛剛一樣的流程:

  1. 先修改 Model
  2. 再執行一次 sync
Sequelize 的 CRUD 使用 Express 時的注意事項,還有一些地雷
Your browser is out-of-date!

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

×