Sequelize 基本操作
时间:2022-07-25
本文章向大家介绍Sequelize 基本操作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
sequelize 基本操作
Sequelize 是 Node 的一个 ORM(Object-Relational Mapping) 框架,用来方便数据库操作。
配置 sequelize
以 mysql 为例
首先我们要引入npm包,sequelize 依赖 mysql2 作为底层驱动,暴露出自己的 API 让我们调用,在转成 mysql 语句进行执行。
"mysql2": "^1.5.1",
"sequelize": "^4.28.6"
const Sequelize = require('sequelize')
// 连接数据库
const sequelize = new Sequelize('database', 'username', 'password', {
host: sqlconf.host,
dialect: 'mysql', // 这里可以改成任意一种关系型数据库
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000,
},
})
// 测试连接是否成功
sequelize
.authenticate()
.then(() => {
console.log('Connection has been established successfully.')
})
.catch(err => {
console.log('Unable to connect to the database', err)
})
// 根据 model自动创建表
sequelize
.sync()
.then(() => {
console.log('init db ok')
})
.catch(err => {
console.log('init db error', err)
})
我们可以调用sync()
根据 model自动在数据库中创建表,也可以不调用,自己手动创。如果使用了 Sequelize 的 Associations,这必须通过 sync()
生成表结构。
创建 model
创建模型,告诉 Sequelize 如何映射数据库表
const UserModel = sequelize.define('user', {
id: {
type: Sequelize.INTEGER(11),
primaryKey: true, // 主键
autoIncrement: true, // 自动递增
},
username: Sequelize.STRING(100),
password: Sequelize.STRING(100),
createdAt: Sequelize.BIGINT,
updatedAt: Sequelize.BIGINT,
}, {
timestamps: false
})
define()
方法的第一个参数为表名,对应的是 users 表。如果不设置 timestamps,Sequlize 会自动为我们添加创建时间和更新时间,我一般选择关闭,手动添加灵活性高些。
增删改查
增
(async () => {
const now = Date.now()
const user = await UserModel.create({
username: '小张',
password: 'root',
createAt: now,
updateAt: now,
})
console.log('创建:' + JSON.stringify(user))
})();
查
(async () => {
// 查找所有
const allUser = await UserModel.findAll()
// 按id查找
const oneUser = await UserModel.findById(id)
// 按条件查询
const someUser = await UserModel.findAll({
where: {
// 模糊查询
name: {
$like: '%小%',
},
// 精确查询
password: 'root',
}
})
// 分页查询
const size = 10 // 每页10条数据
const page = 1 // 页数
const pageUser = await UserModel.findAndCountAll({
where: {
name: {
$like: '%小%',
},
},
limit: size,
offset: size * (page - 1),
})
})();
改
(async () => {
// 方法一
await UserModel.upert(data) // data 里面如果带有 id 则更新,不带则新建
// 方法二
const user = await UserModel.findById(id)
user.update(data)
})()
删
(async () => {
// 方法一
// 删除所有名字带’小‘的用户
await UserModel.destroy({
where: {
username: '小',
},
})
// 方法二
const user = await UserModel.findById(id)
user.destroy()
})()
关联表
Sequelize 提供了一对一,一对多,多对多等关联表操作,我用的不多,这里只介绍 hasMany()
这一种,其他的可以看文档。
设置
首先要在 model 中设置
const School = sequelize.define('school', {
id: {
type: Sequelize.INTEGER(11),
primaryKey: true,
autoIncrement: true,
},
username: Sequelize.STRING(100),
})
const Student = sequelize.define('student', {
id: {
type: Sequelize.INTEGER(11),
primaryKey: true,
autoIncrement: true,
},
username: Sequelize.STRING(100),
})
School.hasMany(Student, {as: 'student', foreignKey: 'schoolId'})
as 参数重新定义了目标model的名字。foreignKey 参数定义了在 t_student 表中关联 key 的名字。
关联查
如果我们想查找一个学校和这个学校中所有的学生信息,可以这样找:
(async () => {
const group = await School.findById(id, {
include: [{
model: Student,
as: 'student',
}],
})
})()
如果我们设置了 as 就需要在 include 选项中设置同样的 as。
按条件查找
(async () => {
const group = await School.findAll({
where: {
name: 'someting',
},
include: [{
model: Student,
as: 'student',
}],
})
})()
文档
更多详细操作请参考官方文档
- nyoj-----127星际之门(一)
- nyoj------20吝啬的国度
- HDUOJ-------2493Timer(数学 2008北京现场赛H题)
- go sync.Mutex 设计思想与演化过程 (一)
- HDUOJ--------A simple stone game(尼姆博弈扩展)(2008北京现场赛A题)
- HDUOJ----2485 Destroying the bus stations(2008北京现场赛A题)
- Go语言实践:从新手入门到上线真实的小型服务所遇到的那些坑
- Node.js真的无所不能?那些不适用的应用领域分析
- hdu-----2491Priest John's Busiest Day(2008 北京现场赛G)
- nyoj------79拦截导弹
- HDUOJ-------2719The Seven Percent Solution
- Golang记录、计算函数执行耗时、运行时间的一个简单方法
- uva----11729 Commando war (突击战争)
- uva-----11292 The Dragon of Loowater
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用 Tensorflow 实现简单多层神经网络
- Tensorflow 命名空间与计算图可视化
- Tensorboard 高维向量可视化
- 在K3s上使用Kong网关插件,开启K3s的无限可能!
- 在线教育平台开发中,作业功能中的图片上传是如何实现的
- java基本数据类型
- java基础语法
- java对象和类
- python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题
- 《剑指 offer》刷题记录之:数组
- R语言中绘制箱形图的替代品:蜂群图和小提琴图
- 《剑指 offer》刷题记录之:字符串 & 链表
- python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题
- 《剑指 offer》刷题记录之:树 & 栈和队列
- R语言自定义两种统计量度:平均值和中位数,何时去使用?