入门
本文从安装,到连接数据库,到增删改查……一步步详细记录Sequelize的基本使用。
文档
安装
npm i sequelize // 这将安装最新版本的 Sequelize
npm i mysql2 // 手动为所选数据库安装驱动程序 ,这里以 MySQL为例
使用
先尝试写一个简单的demo(demo中用到的配置与api的具体说明见下文,您可以通过目录快速定位)。
- 新建sequelize-test文件夹
- 在文件夹下npm init -y
- npm install mysql2 sequelize --save
- 在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的时候能传入的一些参数:database
,username
,password
,options
。
其中,options里面有host
,port
,password
,database
,dialect
等。
具体参数见文档(constructor)
dialect
连接到的数据库的方言。mysql、postgres、sqlite、db2、mariadb和mssql之一。
API
authenticate()
可以使用该方法来测试连接是否正常。
define()
- 定义一个新模型,表示数据库中的一个表。
- 第二个参数传入一个对象,用来定义表的每一列,对象的键对应表的列。
sync()
- 将所有定义过的模型同步到数据库。