使用Sequelize模块操作数据库之增删改查

2023-11-01

前面我们已经了解了Sequelize中模型的创建,现在我们去了解一下通过 Sequelize 对数据库进行增删改查操作,在操作数据库时,增删改操作比较简单,我们会侧重去讲解查询数据库。

简单 INSERT 语句
添加语句是通过Model.create()实现的,参数是一个对象,对象的属性就是表的字段,属性值就是需要添加的数据。见下列实例:

const admin = sequelize.define('admin', {
    username: {
        type: DataTypes.STRING,
        allowNull: false
    },
    userpass: {
        type: DataTypes.STRING,
        allowNull: false
    }
});
const ins = await admin.create({
    username: "张三",
    userpass: "123456",
});

在执行完成之后,会返回一个对象,对象中的属性就是表的字段。

可以通过 bulkCreate 一次添加多条数据,bulkCreate 中的参数是一个数组,数据中包含了需要添加的数据对象。具体实例:

const ins = await admin.bulkCreate([{
    username: "张三",
    userpass: "123456",
},{
    username: "王五",
    userpass: "549745",
}]);
在默认情况下,使用 bulkCreate 不会对插入的数据进行验证我们可以在创建模型时,给模型添加 validate: true让 bulkCreate 也进行验证(验证具体内容见下篇)。

简单 UPDATE 语句
修改语句是通过Model.update()实现的,参数是一个对象。见下列实例:

//模型创建见上
await admin.update({ username: "李四" }, {
  where: {
    username: "张三"
  }
});
通过第二个参数传递修改条件,第二个参数必须存在否则修改不成功。可以通过给 lastName 赋值为 null 和 不给 where 添加属性两种方法来修改全部数据。

await admin.update({ username: "李四" }, {
  where: {
   username: null  
  }
  //或者
  //where: { 
  //}
});
简单 DELETE 语句
修改语句是通过Model.destroy()实现的,参数是一个对象。见下列实例:

await admin.destroy({
  where: {
    username: "张三"
  }
});
如果要删除表的所有数据,可以使用 truncate

await admin.destroy({
  truncate: true
});
SELECT 语句
简单查询
findAll()方法用于查询数据库

admin.findAll();
//翻译为SQL语句:SELECT * FROM admin
查询特定字段
选择某些特定字段,可以使用 attributes 参数:

//admin模型的创建见上述内容
admin.findAll({
  attributes: ['username']
});
//翻译为SQL语句:SELECT username FROM admin

字段重命名
//admin模型的创建见上述内容
admin.findAll({
  attributes: [['username','name']]
});
//翻译为SQL语句:SELECT username AS name FROM admin
聚合函数
使用 sequelize.fn 可以执行聚合函数:

//admin模型的创建见上述内容
admin.findAll({
  attributes: [
                ['username','name'],
                [sequelize.fn('COUNT', sequelize.col('username')), 'n_hats']
              ]
});
//翻译为SQL语句:SELECT username AS name,COUNT(username ) AS n_hats FROM admin
所有字段和排除字段
可以通过 include 属性添加所有字段,后面的属性值表示额外要添加的聚合寒,没有则为空数组。

//admin模型的创建见上述内容
admin.findAll(attributes: {
    include: []
  }
});
可以通过exclude属性排除部分字段,后面的属性值为需要排除的字段。

//admin模型的创建见上述内容
admin.findAll(attributes: {
    exclude: ['username']
  }
});
使用 where 子句
Sequelize提供了很多操作符,以供我们完成复杂了 where 子句。

操作符对象
const { Op } = require("sequelize");
1
下列为部分操作符列表,我们只列举操作符,具体的使用就不在列举。

[Op.and]: [{ a: 5 }, { b: 6 }],            // (a = 5) AND (b = 6)
[Op.or]: [{ a: 5 }, { b: 6 }],             // (a = 5) OR (b = 6)
[Op.eq]: 3,                              // = 3
[Op.ne]: 20,                             // != 20
[Op.is]: null,                           // IS NULL
[Op.not]: true,                          // IS NOT TRUE
[Op.or]: [5, 6],                         // (someAttribute = 5) OR (someAttribute = 6)

// 数字比较
[Op.gt]: 6,                              // > 6
[Op.gte]: 6,                             // >= 6
[Op.lt]: 10,                             // < 10
[Op.lte]: 10,                            // <= 10
[Op.between]: [6, 10],                   // BETWEEN 6 AND 10
[Op.notBetween]: [11, 15],               // NOT BETWEEN 11 AND 15

// 其它操作符

      [Op.all]: sequelize.literal('SELECT 1'), // > ALL (SELECT 1)

      [Op.in]: [1, 2],                         // IN [1, 2]
      [Op.notIn]: [1, 2],                      // NOT IN [1, 2]

[Op.like]: '%hat',                       // LIKE '%hat'
[Op.notLike]: '%hat',                    // NOT LIKE '%hat'
[Op.startsWith]: 'hat',                  // LIKE 'hat%'
[Op.endsWith]: 'hat',                    // LIKE '%hat'
[Op.substring]: 'hat',                   // LIKE '%hat%'
使用 where 子句
在使用 where 子句的时候,所以内容必须放在一个对象中,这个属于 findAll方法的第二个参数,第一次参数用于操作查询的字段。这个对象中有一个名为 where 的属性,这个属性就用于存放查询条件,具体使用方法见:

admin.findAll({
  where: {
    username: "张三"
  }
});
// SELECT * FROM admin WHERE username = '张三'
排序和分组
在上面我们了解了如何使用 where 子句是放在 findAll的第二个对象中,这个对象中不止 where 属性,还有 order 属性 和 group 属性

排序
order 选项用于查询结果的排序数据。排序时应该传入一个包含属性-排序方向的元组/数组,以保证正确的转义:

admin.findAll({
   order:[['username','DESC'],['userpass','ASC']]
});
分组
group 选项用于查询结果的分组,分组时需要传入分组条件,具体使用见实例:

admin.findAll({ username: 'name' });
1
限制和分页
使用 limit 和 offset 参数可以进行 限制/分页:

// 提取10个实例/行
Project.findAll({ limit: 10 });

// 跳过8个实例/行
Project.findAll({ offset: 8 });

// 跳过5个实例,然后获取5个实例
Project.findAll({ offset: 5, limit: 5 });

原文链接:https://blog.csdn.net/qq_45040919/article/details/110318085

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Sequelize模块操作数据库之增删改查 的相关文章

  • 查询以查找平均加权价格

    我在 Oracle 中有一个表 每个给定部分包含多行 每行都有一个与其关联的数量和价格 还有一个给定零件的行集相加的总数量 以下是数据示例 我需要的是获得该零件的平均加权价格 例如 如果数量为 100 的零件的价格为 1 数量为 50 的零
  • 从 Oracle 获取包方法和参数

    我正在寻找 Oracle 查询来获取 Oracle 包 过程的所有参数 我知道有一个视图或表可以提供此功能 但我似乎不记得它是什么 注意 我并不是要从 user objects 获取包列表 而是要获取包 中每个过程的数据类型和参数名称 Th
  • 如何捕获 PL/SQL 块中的唯一约束错误?

    假设我有一个 Oracle PL SQL 块 它将一条记录插入表中 并且需要从唯一约束错误中恢复 如下所示 begin insert into some table some values exception when update som
  • oracle嵌套表的最大行数是多少

    CREATE TYPE nums list AS TABLE OF NUMBER Oracle 嵌套表中最大可能的行数是多少 UPDATE CREATE TYPE nums list AS TABLE OF NUMBER CREATE OR
  • SQL Fiddle 输出错误

    其实我对 PL SQL 还很陌生 我在 SQL Fiddle 中使用 oracle pl sql 创建了下表 create table Employee name varchar2 100 id integer salary integer
  • Oracle 事务在 C++ 和 Java 之间的传播

    我们有一个现有的 C 应用程序 我们将逐步将其替换为新的基于 Java 的系统 在我们用 Java 完全重新实现所有内容之前 我们期望 C 和 Java 必须相互通信 RMI SOAP 消息传递等 我们尚未决定 现在我的经理认为我们需要 J
  • Oracle Developer Tools for Visual Studio 2019 无法正确安装

    在 VS 2019 中 ODT 使用扩展名安装 而不是像以前的版本那样作为安装文件安装 因此 从 VS 2017 升级的 EF 6 使用的 MVC 项目 edmx 文件在扩展安装后不显示数据库图表 空白黑页 编辑 xml 选项等 仅此而已
  • 金融 - 计算到期收益率

    我读了this https stackoverflow com questions 1173555 open source financial library specifically yield to maturity发布关于 net 库
  • 创建和删除表空间 Oracle

    我已经创建了这个表空间 CREATE TABLESPACE IA643 TBS DATAFILE IA643 dat SIZE 500K AUTOEXTEND ON NEXT 300K MAXSIZE 100M 我尝试使用此命令删除它 DR
  • 如何使用 JSON_TABLE 从 Oracle JSON 列获取键值作为结果集

    我用谷歌搜索了很多 似乎无法找到适合我的简单用例的简单解决方案 我在 Oracle 12C 数据库中有一个 json 列 当然实际上是一个带有 json 约束的 varchar 在该列中我存储了这样的 Map 表示 a 9 0847 b 8
  • Oracle SQL——从字符串中删除部分重复项

    我有一个表 其中有一列包含字符串 如下所示 static text here 1abcdefg1abcdefgpxq 从这个字符串1abcdefg重复两次 所以我想删除该部分字符串 然后返回 static text here 1abcdef
  • Oracle:如何查找模式中上次更新(任何表)的时间戳?

    有一个Oracle数据库模式 数据很小 但仍然有10 15个表左右 它包含一种配置 路由表 有一个应用程序必须不时轮询此架构 不得使用通知 如果架构中没有数据更新 应用程序应使用其当前的内存版本 如果任何表有任何更新 应用程序应将所有表重新
  • 使用绑定和空值命中 Oracle 索引的最佳查询

    我有一个表 该表在多个列上有一个索引 其中许多列可以为空 CREATE UNIQUE INDEX UX MYTABLE A B C D E ON MYTABLE A B C D E 现在 我在 C 代码中尝试检查该表并精确命中索引 对于每个
  • 如何检查 Oracle 数据库是否存在长时间运行的查询

    我的应用程序使用 Oracle 数据库 速度缓慢或似乎完全停止 如何找出哪些查询成本最高 以便我可以进一步调查 这显示当前处于 活动 状态的 SQL select S USERNAME s sid s osuser t sql id sql
  • Oracle 数据库 12c 尝试连​​接时出错:网络适配器无法建立连接

    我第一次安装Oracle数据库12c 我正确地遵循了所有步骤并将其安装在 Windows 7 64 位上 但是当我单击 SQL Developer 并尝试创建新连接时 我输入了用户名和密码等信息 最后单击 测试 按钮 我得到了这个错误消息
  • Oracle:如果表存在

    我正在为 Oracle 数据库编写一些迁移脚本 并希望 Oracle 有类似于 MySQL 的东西IF EXISTS构造 具体来说 每当我想删除 MySQL 中的表时 我都会执行类似的操作 DROP TABLE IF EXISTS tabl
  • APEX:从临时表下载 BLOB

    我正在尝试使用 Oracle APEX 4 1 1 构建一个简单的查看应用程序 要显示的信息位于与包含 APEX 应用程序访问的架构的数据库不同的数据库上的表中 使用视图 View 访问此远程表 远程表视图 和数据库链接 视图按预期工作 包
  • IO 错误:从读取调用中得到负一

    我的时间和想法都快用完了 我需要使用 Java 和 Oracle 数据库模拟预订整架飞机 我们有一些关于如何执行此操作以及预期内容的说明 但我们的代码始终出现这种非常奇怪和意外的行为 数据库看起来像这样 我们需要有一个不断运行的线程池来模拟
  • 不是 select 中带有 MAX 的单组组函数

    Select sg gameno Max sg Year sg end sg hostcity country olympic name from Summergames s Country co where s country isoco
  • 当我输入 dateadd 或 datediff 代码时,我总是收到此错误“ORA-00904“DATEADD”无效标识符。”

    我有一个大学项目 并且有一个包含入院和出院日期属性的患者表 我需要删除超过 7 年的记录 我使用了以下代码 delete from patient where dis date gt datedadd yy 7 getdate 我收到错误

随机推荐

  • IDEA无法创建目录

    在WEB INF目录下添加新目录 右键找不到new directory选项 可能是因为设置junit test目录导致 在项目上右键 选择 Make Directory as 之后再选择 unmarke开头的那个选项 下图中是选择过后的 已
  • luckysheet的使用——10.页面缩放报错问题

    在使用luckysheet的项目 切换到其他页面后 对该页面进行缩放的操作时 会触发luckysheet的resize操作 此时因为当前页面并非是luckysheet的调用页面 页面就会报错无法使用 需要对源码进行修改 阻止该方法的调用 1
  • NAT 技术详解

    一 什么是NAT 为什么要使用NAT NAT是将私有地址转换为合法IP地址的技术 通俗的讲就是将内网与内网通信时怎么将内网私有IP地址转换为可在网络中传播的合法IP地址 NAT的出现完美地解决了lP地址不足的问题 而且还能够有效地避免来自网
  • android如果将recyclerView嵌套进NestedScrollView中,可能导致加载更多一直执行

    今天在使用BaseQuickAdapter对RecyclerView进行绑定的时候 支持加载更多 却发现一直自动进行加载更多 最后发现问题是因为在NestedScrollView中的缘故 还不知为什么
  • Gradio学习笔记--Gradio基本用法和简单案例

    目录 1 配置Gradio 2 Hello World案例 2 1 基本使用 2 2 进阶使用 3 图像案例 3 常用类 Interface 和 Blocks 1 配置Gradio 使用 pip 安装 Gradio pip install
  • Feedsky 上 csdn blog 订阅数排名 (zz)

    1114356 programmer editor http blog csdn net programmer editorhttp feeds feedsky com csdn net programmer editor 23897 po
  • Ubuntu子系统下ssh安装、开启等

    查看win系统盘符 ls 加粗部分为代码 yt PC 20200902BXWS cd mnt yt PC 20200902BXWS mnt ls 因为电脑上有四个盘 外加一个虚拟环境wsl 在这里插入代码片 查看linux 目录 才是根目录
  • 出现了一个意外,不能完成你在设置中所要求的更改

    今天叫了师傅来装宽带 在配置IP地址的时候出现了这样的情况 本来我里面是有以前设置的IP地址和DNS服务器地址 现在要更改成自动获取 结果总是弹出这样的错误信息来 有点烦 师傅忙活了半天 也没能搞定 正巧到了饭点 他叫我先自己弄弄 他先回去
  • 嘉立创投板笔记-Altum Designer机械层对板子形状的影响

    本次采用最简单的zip下单 操作部分记录如下 板子边框层用嘉立创建议的机械层1 mechanical 1 虽然 3D图仅供参考 具体以实物为准 但是嘉立创自家的3D解析想必也能反映出一定的形状识别逻辑的 注意 本笔记仅供参考 具体说法以嘉立
  • facenet代码注释

    facenet识别中的embedding代码块 import tensorflow as tf import numpy as np import sys import os import copy sys path append alig
  • 原型绘制提效技巧分享

    不管是前台PM还是后台PM 在工作中或多或少都要进行原型设计 原型可以说是产品 开发 测试之间进行交流沟通最重要的文档之一 那么怎么把原型画得又快又好呢 从设计流程上看 原型设计节点包括但不限于梳理需求大纲 规划页面结构 完善信息结构 绘制
  • 存储器了解

    1 sdio 之前弄过一个wifi模块 在stm32单片机上 基于sdio开发的 SDIO Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块 内置无线网络协议IEEE802 11协议栈以及TCP IP协议栈 能够实现用户
  • vue中根据某一个值的改变而动态改变样式

    最近有一个需求 动态改变宽度 缩小就变420px 放大宽度就应该占满整个屏幕 第一步 在div那里定义一个ref的值 第二步 计算屏幕的宽度 第三步 监听数的改变 从而改变样式 4 完美 收工
  • 42、Flutter之GridView组件详解

    GridView GridView可以构建一个二维网格列表 其默认构造函数定义如下 GridView Key key Axis scrollDirection Axis vertical bool reverse false ScrollC
  • 手机内存RAM、ROM简介

    手机内存包含两个 一个是运行内存 RAM 一个是机身内存 ROM 两者的功能有所不同 运行内存是对手机操作系统和其它程序运行过程中 产生的临时数据进行存储的媒介 如果手机运行的程序比较多 占用运行内存空间较大 会对手机运行速度产生影响 手机
  • 安装ise14.7时遇到的问题

    安装软件我踩过不少坑 这就分享给大家 也当做自己一个记录 省的又花大量时间找解决方法 1 打开ise跳出如下警告并无法打开ise使用 警告VC 2008runtime libraries are not inastalled 翻译成中文 未
  • Unity移动端Input---触控

    void Update Input GetKeyDown KeyCode Space Input GetAxis Horizontal 按左 右箭头或A D键 Input GetAxis Vertical 按上 下箭头或w s键 Input
  • Selenium 官网打不开怎么办?

    Selenium 官网打不开怎么办 刚接触Selenium的时候发现官网打不开 很是奇怪 我以为网站挂了 后来才知道这个网站也被屏蔽了 那就不上了呗 可是学习资料哪里找 我找了一下 github啊 selenium在github上开源 上面
  • 单链表实现(C++)

    C 实现单链表数据结构 myList h ifndef MYLIST H define MYLIST H typedef struct node int data struct node next Node class myList pub
  • 使用Sequelize模块操作数据库之增删改查

    前面我们已经了解了Sequelize中模型的创建 现在我们去了解一下通过 Sequelize 对数据库进行增删改查操作 在操作数据库时 增删改操作比较简单 我们会侧重去讲解查询数据库 简单 INSERT 语句 添加语句是通过Model cr