Sequelize入门——从零开始做一个小demo

2023年1月5日11:59:14

入门

本文从安装,到连接数据库,到增删改查……一步步详细记录Sequelize的基本使用。

文档

中文文档

sequelize 6 API

安装

npm i sequelize  // 这将安装最新版本的 Sequelize
npm i mysql2  // 手动为所选数据库安装驱动程序 ,这里以 MySQL为例

使用

先尝试写一个简单的demo(demo中用到的配置与api的具体说明见下文,您可以通过目录快速定位)。

  1. 新建sequelize-test文件夹
  2. 在文件夹下npm init -y
  3. npm install mysql2 sequelize --save
  4. 在sequelize-test下新建一个src文件夹。

连接数据库

在src下新建:db.js

const { Sequelize } = require('sequelize')

const conf = {
  host: 'localhost',
  dialect: 'mysql' // 连接到的数据库的方言。mysql、postgres、sqlite、db2、mariadb和mssql之一。
}

// 创建 sequelize 实例,依次传入 database username password options
const seq = new Sequelize(
  'sequelize_test', // database 数据库名称 
  'root', // username 用户名
  '你的密码', // password 密码
  conf // options
)

注意要先把对应数据库创建好,不然会连接失败的。

测试连接

// 用 authenticate 测试连接
seq.authenticate().then(() => {
  console.log('Connection has been established successfully.');
}).catch((error) => {
  console.error('Unable to connect to the database:', error);
})

终端输入node src/db.js,尝试运行一下(下图是连接成功后的样子):

如果连接失败,记得先检查下用户名和密码有没有输错。可以看一下假如输错密码,会打印出什么:

如果配置里填的数据库不存在,报错信息如下:

创建模型

在src下新建:model.js。

const Sequelize = require('sequelize')
const seq = require('./db')

// User 模型
// define 接收两个参数,第一个是名称,第二个是配置,配置各个列。
const User = seq.define(
  // 同步到数据库的 users 表。默认情况下, Sequelize 会自动将模型名转为复数并用作表名。
  'user', 
  {
    // id 不用定义,sequelize 会帮我们增加上
    // 默认情况下,Sequelize 使用数据类型 DataTypes.DATE 自动向每个模型添加 createdAt 和 updatedAt 字段.
    username: {
      type: Sequelize.STRING, // 数据类型:VARCHAR(255)
      allowNull: false   // 设为必填
    },
    password: {
      type: Sequelize.STRING,
      allowNull: false
    },
    realname: {
      type: Sequelize.STRING,
    }
  }
)

同步模型到数据库

在 src 下新建 sync.js 文件,sync就是同步的意思。

const seq = require('./db')

// 需要同步的模型
require('./model')

// 将模型同步到数据库
seq.sync().then(() => {
  process.exit() // 退出进程
})

终端输入node src/sync.js,尝试运行一下:

可以去 MySQLWorkbench 看一下:

新增数据

在src下新建create.js:

const { User } = require('./model')

!(async function () {
  // 创建 user
  const ly = await User.create({
    username: 'ly',
    password: '123',
    realname: '梨衣衣'
  })
  console.log('ly:', ly)
})()

看下打印结果:我们只需用到其中的dataValues就够了。

我们可以去MySQLWorkbench看一下:(在示例之前我已经创建了两条数据,第三条是刚才新增的)

查找数据

在src下新建select.js:

1.查询一条数据

const { User } = require('./model')

!(async function() {
  // 模拟登录(通过查询一条数据的方式) 
  const sl = await User.findOne({
    // 查询条件
    where: {
      username: 'sl',
      password: '123'
    }
  })
  console.log('sl:', sl.dataValues)
})()

在终端输入node src/select.js,看下打印结果:

2.查询多条数据:

const Sequelize = require('sequelize')
const { User } = require('./model')

!(async function() {
  const userList = await User.findAll({
    // 条件
    where: {
      username: {
        // 模糊查询,相当于`select * from users where username like '%${keyword}%'`
        [Sequelize.Op.like]: '%l%' 
      }
    },
    // 排序
    order: [
      ['id', 'desc'] // 相当于 SQL 语句:order by id desc,根据id倒序排序
    ]
  })
  console.log('userList:', userList.map(item => item.dataValues))
})()

在终端输入node src/select.js,看下打印结果:

修改数据

在src下新建update.js:

const { User } = require('./model')

!(async function () {
  const res = await User.update(
    // 修改的内容 (示例修改 realname 和 password)
    {
      realname: '梨衣',
      password: '111'
    },
    // 条件(要修改哪条数据)
    {
      where: {
        id: 3
      }
    }
  )
  console.log('修改后的res', res)
})()

在终端输入node src/update.js,看下打印结果:

res的值是本次操作影响到的条数:[1]表示成功修改了1条。[0]表示修改了0条。

我们可以去MySQLWorkbench看一下,最后一条数据已经被改变:

删除数据

在src下新建delete.js:

const { User } = require('./model')

!(async function () {
  const res = await User.destroy({
    where: {
      id: 3,
      username: 'ly'
    }
  })
  console.log('删除后的res:', res)
})()

在终端输入node src/delete.js,看下打印结果:

res的值是本次操作删除条数:1表示成功删除了1条。


资料补充之配置与API

创建实例

配置数据库名称、用户名、密码等,实例化sequelize。

new Sequelize的时候能传入的一些参数:databaseusernamepasswordoptions

其中,options里面有hostportpassworddatabasedialect等。

具体参数见文档(constructor)

dialect

连接到的数据库的方言。mysql、postgres、sqlite、db2、mariadb和mssql之一。

API

authenticate()

可以使用该方法来测试连接是否正常。

define()

  • 定义一个新模型,表示数据库中的一个表。
  • 第二个参数传入一个对象,用来定义表的每一列,对象的键对应表的列。

sync()

  • 将所有定义过的模型同步到数据库。

  • 作者:狗狗的仙女大人
  • 原文链接:https://blog.csdn.net/dongkeai/article/details/127433549
    更新时间:2023年1月5日11:59:14 ,共 3296 字。