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',
}],
})
})()

文档

更多详细操作请参考官方文档

博客首发地址:https://www.jianshu.com/u/13cd86311525

Sequelize 基本操作的更多相关文章

  1. 一个关于vue+mysql+express的全栈项目(四)------ sequelize中部分解释

    一.模型的引入 引入db.js const sequelize = require('./db') sequelize本身就是一个对象,他提供了众多的方法, const account = seque ...

  2. Sequelize手记 - (一)

    最近开始接触数据库,现在普遍用的都是Mysql数据库,简单的了解了一下sql语句,没有太深入的学习,然后就开始找相关的ORM框架,然后锁定了Sequelize,个人感觉很强大,搜索了一些文档,但是很让 ...

  3. Key/Value之王Memcached初探:二、Memcached在.Net中的基本操作

    一.Memcached ClientLib For .Net 首先,不得不说,许多语言都实现了连接Memcached的客户端,其中以Perl.PHP为主. 仅仅memcached网站上列出的语言就有: ...

  4. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  5. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  6. nodejs项目mysql使用sequelize支持存储emoji

    nodejs项目mysql使用sequelize支持存储emoji 本篇主要记录nodejs项目阿里云mysql如何支持存储emoji表情. 因由 最近项目遇到用户在文本输入emoji进行存储的时候导 ...

  7. 三、Redis基本操作——List

    小喵的唠叨话:前面我们介绍了Redis的string的数据结构的原理和操作.当时我们提到Redis的键值对不仅仅是字符串.而这次我们就要介绍Redis的第二个数据结构了,List(链表).由于List ...

  8. 二、Redis基本操作——String(实战篇)

    小喵万万没想到,上一篇博客,居然已经被阅读600次了!!!让小喵感觉压力颇大.万一有写错的地方,岂不是会误导很多筒子们.所以,恳请大家,如果看到小喵的博客有什么不对的地方,请尽快指正!谢谢! 小喵的唠 ...

  9. 一、Redis基本操作——String(原理篇)

    小喵的唠叨话:最近京东图书大减价,小喵手痒了就买了本<Redis设计与实现>[1]来看看.这里权当小喵看书的笔记啦.这一系列的模式,主要是先介绍Redis的实现原理(可能很大一部分会直接照 ...

随机推荐

  1. Sublime Text 3 常用快捷键

    一. 选择类       Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.     Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并 ...

  2. JavaScript中对日期格式化的新想法.

    其实我们对与日期的显示,也就那么几种,不需要每次都传格式化字符串. 只要告诉函数你想要什么结果就好了,以下是在ios的JavaScript中我新写的日期格式化函数: /** 格式化日期 @param ...

  3. 错误代码: 1054 Unknown column &#39;t.createUsrId&#39; in &#39;group statement&#39;

    1.错误描写叙述 1 queries executed, 0 success, 1 errors, 0 warnings 查询:select count(t.id),t.`createUserId` ...

  4. STL之容器适配器stack的实现框架

    说明:本文仅供学习交流,转载请标明出处,欢迎转载! 一提到适配器(adapter).我们就想到了早期用电话线上网所用的调制解调器,俗称"猫"."猫"的作用是实现 ...

  5. js----数组处理之splice(有js原始addClass方法哦)

    上次写了一个轮播的方法:http://blog.csdn.net/stronglyh/article/details/46833499 由于别人问我的时候,给了我html.于是乎我就看到了页面中引用了 ...

  6. UVA 1426 - Discrete Square Roots(数论)

    UVA 1426 - Discrete Square Roots 题目链接 题意:给定X, N. R.要求r2≡x (mod n) (1 <= r < n)的全部解.R为一个已知解 思路: ...

  7. hdu 5635 LCP Array(BC第一题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5635 LCP Array Time Limit: 4000/2000 MS (Java/Others) ...

  8. cocos2dx中关于Action动作的相关API的具体介绍

     //CCMoveBy  创建一个移动的动作 //參数1:移动到目标坐标所需的时间 //參数2:目标坐标 //支持reverse 能够获取其反向动作 //CCMoveTo  一样的 //CCAct ...

  9. 深入理解JSP

    JSP(Java server page)是Java EE规范最基本成员,他是Java Web开发的重点知识,尽管我们一直在用.但其原理知之甚少.今天重点研究一些JSP核心内容以及其工作原理. JSP ...

  10. 用keras做SQL注入攻击的判断

    本文是通过深度学习框架keras来做SQL注入特征识别, 不过虽然用了keras,但是大部分还是普通的神经网络,只是外加了一些规则化.dropout层(随着深度学习出现的层). 基本思路就是喂入一堆数 ...