入门
本文从安装,到连接数据库,到增删改查……一步步详细记录Sequelize的基本使用。
文档
中文文档
sequelize 6 API
安装
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()
- 将所有定义过的模型同步到数据库。