如何使用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手册


更多节点教程: