如何使用Sequelize與PostgreSQL交互

使用數據庫時,您可以選擇使用數據庫提供的原語,也可以使用建立在頂部並為您抽像一些小細節的庫。

續集是這些庫之一,它是一個非常流行的Node.js包裝器,用於PostgreSQL的的MySQL和其他數據庫。

在本文中,我將探討如何使用Sequelize與PostgreSQL數據庫一起使用。

安裝和配置Sequelize

在引擎蓋下,Sequelize使用pg庫連接到PostgreSQL,所以當我們安裝sequelizenpm包,我們還需要安裝pg

npm install pg sequelize

提示:別忘了先跑步npm init -y如果項目是全新的,而您沒有package.json文件已經。

在Node.js文件中,首先定義數據庫訪問變量:

const user = '<postgres user>'
const host = 'localhost'
const database = '<postgres db name>'
const password = '<postgres password>'
const port = '<postgres port>'

然後從導入3個對象sequelize

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

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

const sequelize = new Sequelize(database, user, password, {
  host,
  port,
  dialect: 'postgres',
  logging: false
})

我們告訴Sequelize這是哪種數據庫dialect屬性(如上所述,它不僅可以處理Postgres)。

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

如何創建一個Sequelize模型

對於您要使用Sequelize進行處理的每個表,您都可以創建一個模型

這是一個例子,假設我們有一個dogs有兩列的表:nameage

我們創建一個Dog類擴展Model基類:

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

const class Dog extends Model {}

然後致電init()類上的靜態方法,描述了其中包含的數據以及我們要應用的規則。在這種情況下,我們禁用null

Dog.init({
  name: {
    type: DataTypes.STRING,
    allowNull: false
  },
  age: {
    type: DataTypes.INTEGER,
    allowNull: false
  }
}, {
  sequelize,
  modelName: 'dog',
  timestamps: false
})

我們用了DataTypes.STRINGDataTypes.INTEGER。這DataTypes對象包含對我們可以使用的所有類型的引用,並且它們映射到每種特定的數據庫類型。查看官方文檔對於更多類型,您可以使用。

如何從數據庫中獲取數據

現在我們有了一個模型,我們如何從表中獲取數據?

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

Dog.findAll()

調用此方法將返回所有行的列表,我們將其分配給變量:

const results = await Dog.findAll()

我們用await因為findAll()回報承諾

要限制我們檢索的列,請使用attributes大批:

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

添加一個WHERE使用的查詢子句where財產。例如,獲得所有8歲的狗:

Dog.findAll({
  where: {
    age: 8,
  }
})

或讓所有年齡大於5歲的狗:

Dog.findAll({
  where: {
    age: {
      [Op.gte]: 5,
    }
  }
})

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

Dog.findAll({
  limit: 10,
  order: [
    ['name', 'DESC']
  ]
})

如何將數據插入數據庫

我們可以打電話Dog.create()傳遞對像以在數據庫中創建新行:

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

如何更新數據

使用update()更新表中值的方法。

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

Post.update({
  age: 9
}, {
  where: {
    name: 'Roger'
  }
})

卸下where屬性將更新所有行:

Post.update({
  age: 10
})

免費下載我的Node.js手冊


更多節點教程: