/

如何使用Sequelize與PostgreSQL進行互動

如何使用Sequelize與PostgreSQL進行互動

在使用資料庫時,您可以選擇使用資料庫提供的基本功能,或使用一個建立在其之上並為您抽象出細節的函式庫。

Sequelize就是其中之一,它是一個非常受歡迎的Node.js封裝器,可用於PostgreSQLMySQL和其他資料庫。

在本文中,我將探討如何使用Sequelize來處理PostgreSQL資料庫。

安裝並設定Sequelize

在內部,Sequelize使用pg函式庫與PostgreSQL建立連接,所以當我們安裝sequelize npm套件時,我們還需要安裝pg

1
npm install pg sequelize

提示:如果你的專案是全新的且沒有package.json文件,請不要忘記首先執行npm init -y

在您的Node.js文件中,您首先定義資料庫存取變數:

1
2
3
4
5
const user = '<postgres用戶名>'
const host = 'localhost'
const database = '<postgres資料庫名>'
const password = '<postgres密碼>'
const port = '<postgres埠號>'

然後從sequelize進行三個物件的導入:

1
import { Sequelize, Model, DataTypes } from 'sequelize'

然後,您可以使用以下語法初始化一個新的Sequelize物件實例:

1
2
3
4
5
6
const sequelize = new Sequelize(database, user, password, {
host,
port,
dialect: 'postgres',
logging: false
})

我們告訴Sequelize這是什麼類型的資料庫,可以在dialect屬性中指定(如前所述,它可以處理不只是Postgres)。

我們還禁用了日誌記錄,因為它會記錄所有SQL查詢,這可能會很冗長,且我們實際上並不需要查看它們(除非您正在調試問題)。

如何創建一個Sequelize模型

對於要使用Sequelize操作的每個資料表,您都需要創建一個模型

以下是一個示例,假設我們有一個具有“name”和“age”兩列的dogs資料表。

我們創建一個Dog類,並將其擴展Model基類:

1
2
3
import { Sequelize, Model, DataTypes } from 'sequelize'

const class Dog extends Model {}

然後在類上調用init()靜態方法,描述資料和我們要應用的規則。在此示例中,我們禁用了null

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dog.init({
name: {
type: DataTypes.STRING,
allowNull: false
},
age: {
type: DataTypes.INTEGER,
allowNull: false
}
}, {
sequelize,
modelName: 'dog',
timestamps: false
})

我們使用了DataTypes.STRINGDataTypes.INTEGERDataTypes物件包含了我們可以使用的所有類型的參考,它們分別映射到每個特定的資料庫類型。欲了解更多您可以使用的類型,請參閱官方文檔

如何從資料庫中獲取資料

現在我們有了一個模型,如何從資料表中獲取資料呢?

我們可以使用findAll()方法:

1
Dog.findAll()

調用此方法將返回所有資料列的列表,並將其賦值給一個變數:

1
const results = await Dog.findAll()

我們使用了await,因為findAll()返回一個Promise。

要限制我們檢索的資料列,可以傳遞一個具有attributes數組的物件:

1
2
3
Dog.findAll({
attributes: ['age']
})

使用where屬性在查詢中添加WHERE子句。例如,獲取所有年齡為8的狗:

1
2
3
4
5
Dog.findAll({
where: {
age: 8,
}
})

或者,獲取所有年齡大於5的狗:

1
2
3
4
5
6
7
Dog.findAll({
where: {
age: {
[Op.gte]: 5,
}
}
})

更多屬性可以讓您執行其他操作,如limitorder

1
2
3
4
5
6
Dog.findAll({
limit: 10,
order: [
['name', 'DESC']
]
})

如何將資料插入資料庫

我們可以調用Dog.create()並傳遞一個物件來在資料庫中創建一個新的資料列:

1
2
3
const name = 'Roger'
const age = 8
const result = await Dog.create({ name, age })

如何更新資料

使用update()方法在資料表中更新值。

在此示例中,我將“Roger”的年齡設置為9:

1
2
3
4
5
6
7
Post.update({
age: 9
}, {
where: {
name: 'Roger'
}
})

如果刪除where屬性,將會更新所有資料列:

1
2
3
Post.update({
age: 10
})

tags: [“sequelize”, “postgresql”, “nodejs”, “database”, “data manipulation”]