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

首页 / 新闻资讯 / 正文

本文从安装,到连接数据库,到增删改查……一步步详细记录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条。


创建实例

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

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

其中,options里面有hostportpassworddatabasedialect等。

具体参数见文档(constructor)

dialect

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

API

authenticate()

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

define()

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

sync()

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