如何使用Sequelize與PostgreSQL進行互動
在使用資料庫時,您可以選擇使用資料庫提供的基本功能,或使用一個建立在其之上並為您抽象出細節的函式庫。
Sequelize就是其中之一,它是一個非常受歡迎的Node.js封裝器,可用於PostgreSQL、MySQL和其他資料庫。
在本文中,我將探討如何使用Sequelize來處理PostgreSQL資料庫。
安裝並設定Sequelize
在內部,Sequelize使用pg
函式庫與PostgreSQL建立連接,所以當我們安裝sequelize
npm套件時,我們還需要安裝pg
:
1 | npm install pg sequelize |
提示:如果你的專案是全新的且沒有
package.json
文件,請不要忘記首先執行npm init -y
。
在您的Node.js文件中,您首先定義資料庫存取變數:
1 | const user = '<postgres用戶名>' |
然後從sequelize
進行三個物件的導入:
1 | import { Sequelize, Model, DataTypes } from 'sequelize' |
然後,您可以使用以下語法初始化一個新的Sequelize
物件實例:
1 | const sequelize = new Sequelize(database, user, password, { |
我們告訴Sequelize這是什麼類型的資料庫,可以在dialect
屬性中指定(如前所述,它可以處理不只是Postgres)。
我們還禁用了日誌記錄,因為它會記錄所有SQL查詢,這可能會很冗長,且我們實際上並不需要查看它們(除非您正在調試問題)。
如何創建一個Sequelize模型
對於要使用Sequelize操作的每個資料表,您都需要創建一個模型。
以下是一個示例,假設我們有一個具有“name”和“age”兩列的dogs
資料表。
我們創建一個Dog
類,並將其擴展Model
基類:
1 | import { Sequelize, Model, DataTypes } from 'sequelize' |
然後在類上調用init()
靜態方法,描述資料和我們要應用的規則。在此示例中,我們禁用了null
:
1 | Dog.init({ |
我們使用了DataTypes.STRING
和DataTypes.INTEGER
。DataTypes
物件包含了我們可以使用的所有類型的參考,它們分別映射到每個特定的資料庫類型。欲了解更多您可以使用的類型,請參閱官方文檔。
如何從資料庫中獲取資料
現在我們有了一個模型,如何從資料表中獲取資料呢?
我們可以使用findAll()
方法:
1 | Dog.findAll() |
調用此方法將返回所有資料列的列表,並將其賦值給一個變數:
1 | const results = await Dog.findAll() |
我們使用了
await
,因為findAll()
返回一個Promise。
要限制我們檢索的資料列,可以傳遞一個具有attributes
數組的物件:
1 | Dog.findAll({ |
使用where
屬性在查詢中添加WHERE
子句。例如,獲取所有年齡為8的狗:
1 | Dog.findAll({ |
或者,獲取所有年齡大於5的狗:
1 | Dog.findAll({ |
更多屬性可以讓您執行其他操作,如limit
和order
:
1 | Dog.findAll({ |
如何將資料插入資料庫
我們可以調用Dog.create()
並傳遞一個物件來在資料庫中創建一個新的資料列:
1 | const name = 'Roger' |
如何更新資料
使用update()
方法在資料表中更新值。
在此示例中,我將“Roger”的年齡設置為9:
1 | Post.update({ |
如果刪除where
屬性,將會更新所有資料列:
1 | Post.update({ |
tags: [“sequelize”, “postgresql”, “nodejs”, “database”, “data manipulation”]