(四.2)sequelize增删改查
@
目录
新增数据(有待考证(原因是操作时候必须要有表对象))User.create
这个位置需要引入上述的model建表的两个对象
const {Blog , User} = require('./model')
!(async function() {
创建用户 添加表数据 这样相应的内容按照表数据都会添加上 添加时间 和 修改时间 会自动的产生
const zhangsan = await User.create({
userName:'zhangsan',
password:'123',
nickName:'张三'
})
可以直接使用对象打印出来数据看一下
console.log('zhansan',zhangsan.dataValues)
})()
查询数据 User.findOne attributes findAll findAndCountAll
const {Blog , User} = require('./model')
!(async function() {
//查询一条数据----------------------------------
const zhangsan = await User.findOne({
where:{
userName:'zhangsan'
}
})
console.log('zhangsan',zhangsan,dataValues)
//查询特定的列(一条)----------------------------------
const zhangsan = await User.findOne({
attributes:['userName','nickName'],
where:{
userName:'zhangsan'
}
})
console.log('zhangsan',zhangsan.dataValues)
//查询一个列表----------------------------------
const zhangsanBlogList = await Blog.findAll({
where:{
userId:1
},
order:[
//可以添加多条
['id','desc']
]
})
//注意这个地方出来的是zhangsanBlogList返回的东西 直接点dataValues 是不好用 所以
console.log('zhangsan',zhangsanBlogList.map(blog => blog.dataValues))
//这样返回的就是比较纯净的一个数组
//分页----------------------------------
const blogPageList= await Blog.findAll({
limit:2, //限制本次查询2条
offset:0, //跳过多少条
order:[
//可以添加多条
['id','desc']
]
})
console.log('blogPageList',blogPageList.map(blog => blog.dataValues))
//查询总数----------------------------------
const blogListAndCount = await Blog.findAndCountAll({
limit:2, //限制本次查询2条
offset:0, //跳过多少条
order:[
//可以添加多条
['id','desc']
]
})
console.log('blogListAndCount',
// 所有的总数,不考虑的分页的数据
blogListAndCount.count,
//这个和上面的获取的数据是一样的就你取出来的数据
blogListAndCount.rows.map(blog => blog.dataValues)
)
})()
连表查询
这个地方注意 就是之前在做关联外键的时候有一个配置是谁和谁所关联的
所以这个地方就是你使用哪个对象开始进行查询的操作 就是获取哪个表数据 然后得到所关联的数据
const {Blog , User} = require('./model')
!(function(){
const blogListWithUser = await Blog,findAndCountAll({
order:[
//可以添加多条
['id','desc']
],
//关联查询的条件
include:[
{
model:User, //所基于的关联对象
attributes:['userName','nickName'], //关联表的所获取的字段
where:{ //相应的查询条件
username:'zhangsan'
}
}
]
})
console.log('blogListWithUser ',
// 所有的总数,不考虑的分页的数据
blogListWithUser.count,
//数据整合一下 查询的出的数据 每一条里面都有一个user 这个user就是最早创建的时候创建的那个
blogListWithUser.rows.map(blog => {
const blogVal = blog.dataValues
blogVal.user = blogVal.user.dataValues
return blogVal
})
)
})()
更新数据 update
新建update.js
const {User} = require('./model')
!(async function(){
const updateRes = await User.update({
nickName:'张三1'
},{
where:{
userName:'zhangsan'
}
})
console.log('updateRes...',updateRes) //返回结果是一个数组,就是修改了几行
console.log('updateRes...',updateRes[0]>0) //返回结果是true
})()
删除数据 destroy
const {User} = require('./model')
!(async function(){
const deleteData = await User.destroy({
where:{
id:4
}
})
console.log('deleteData ...',deleteData ) //返回结果是一个数字 就是删除的条数
console.log('deleteData ...',deleteData > 0 )
})()
注意删除外键关联
上述删除的用户的时候 就会出现相应的关联删除 但是这个外键关联是sequelize做的,所以删除的时候会提示相应的报错意思就是你有外键关联 不能直接删除,但是如果是数据库做的外键关联的情况,在删除的时候就可以直接的删除,然后怎么使用sequelize来解决,后面再说,现在的解决的方案就是去MySQL的可视化工具或者命令行,把外键的关联改成那个就是关联的那个
介绍sequelize连接池
是一种连接机制 在相应的位置保存着
咫尺远近却无法靠近的那个你,才敢让你发觉你并不孤寂