Sequelize入门及简单的增删改查

前言

学习一下NodeJS怎么使用Sequelize怎么查询数据库数据


一、Sequelize是什么?

Sequelize 是一个基于 promise 的 Node.js ORM,

二、搭建项目

1.安装过程

npm i -g  sequelize-cli //全局安装sequelize-cli

npm i  sequelize mysql2  //安装sequelize和mysql2

sequelize init  //初始化模型

初始化成功之后会自动生成这四个文件夹 

 

2.配置数据库信息,修改生成的文件夹之中的config\config.json

3.创建表

sequelize model:generate --name Article --attributes title:string,content:text
//Article :表名
//title,content:表内容
//string,text:表内容类型

执行成功之后如下且会在这两个文件夹中生成这两个js

 

4.向数据库创建表

sequelize db:migrate

Navicat中就会创建这两个表 

 

5.通过种子文件大量新增数据 

sequelize seed:generate  --name article

//article:表名

运行成功之后将会在seeders文件中生成这个命名格式的js文件 

 在这个文件中编写新增数据的代码

'use strict';

/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up(queryInterface, Sequelize) {
    const articles = []
    const counts = 100
    for (let i = 1; i <= counts; i++) {
     //表内的相关字段 
      const article = {
        title: `文章标题${i}`,
        content: `文章内容${i}`,
        createdAt: new Date(),
        updatedAt: new Date()
      }
      articles.push(article)
    }
    await queryInterface.bulkInsert('Articles',
      articles,
      {});

  },

  async down(queryInterface, Sequelize) {
    /**
     * Add commands to revert seed here.
     *
     * Example:
     * await queryInterface.bulkDelete('People', null, {});
     */
    await queryInterface.bulkDelete('Articles', null, {});
  }
};
sequelize db:seed  --seed 20240619135935-article

//20240619135935-article:这个时seeders新增的js文件名

 运行之后可在Navicat中查看新增的数据

三.sequelize增删改查

在routes文件夹中创建一个文件夹,可自行命名,我命名为admin,并且在admin文件夹中新增一个articles.js

var express = require('express');
var router = express.Router();
const { Article } = require('../../models');

module.exports = router;

在根目录中的app.js中新增

var adminRouter = require('./routes/admin/articles');


app.use('/admin/articles', adminRouter);

1.新增 

articles.js

router.post('/', async function (req, res, next) {
    try {
        const article = await Article.create(req.body)
        res.status(200).json({
            code: 200,
            message: "新增成功",
            data: article
        })
    }
    catch (error) {
        res.status(500).json({
            code: 500,
            message: "新增失败",
            errors: [error.message]

        })
    }
})

2.删除

router.delete('/:id', async function (req, res, next) {
    try {
        const { id } = req.params
        const article = await Article.findByPk(id)
        if (article) {
            await article.destroy()
            res.json({
                status:true,
                message:"删除成功"
            })
        } else {
            res.status(404).json({
                code: 404,
                message: "查询不到信息"
            })
        }

    }
    catch (error) {
        res.status(500).json({
            code: 500,
            message: "删除失败",
            errors: [error.message]

        })
    }
})

3.更新

router.put('/:id', async function (req, res, next) {
    try {
        const { id } = req.params
        const article = await Article.findByPk(id)
        if (article) {
            await article.update(req.body)
            res.json({
                status:true,
                message:"更新成功",
                data:article
            })
        } else {
            res.status(404).json({
                code: 404,
                message: "查询不到信息"
            })
        }

    }
    catch (error) {
        res.status(500).json({
            code: 500,
            message: "删除失败",
            errors: [error.message]

        })
    }
})

4.查看所有内容(带有模糊查询)

router.get('/', async function (req, res, next) {
    try {
        const query =req.query
        const condition = {
            order: [['id', 'DESC']]
        }
        if(query.title){
            condition.where={
                title:{
                    [Op.like]:`%${query.title}%`
                }
            }
        }
        const articles = await Article.findAll(condition)
        res.json({
            code: 200,
            message: "查询成功",
            data: {
                articles
            }
        });
    } catch (error) {
        res.status(500).json({
            code: 500,
            message: "查询失败",
            errors: [error.message]

        })
    }

});

5.根据id查询相关内容

router.get('/:id', async function (req, res, next) {
    try {
        const { id } = req.params
        const article = await Article.findByPk(id)
        if (article) {
            res.json({
                code: 200,
                message: "查询成功",
                data: {
                    article
                }
            });
        } else {
            res.status(404).json({
                code: 404,
                message: "未查询到数据"
            })
        }

    } catch (error) {
        res.status(500).json({
            code: 500,
            message: "查询失败",
            errors: [error.message]

        })
    }
})

四.总结

    由于我是刚入门NodeJS,所以还只是对sequelize的简单了解,之后有更深的了解再继续分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/735383.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI视频教程下载-与ChatGPT结合的UX用户体验/UI用户界面设计策略

Revolutionize UX_UI_ AI-Design Strategies with ChatGPT 提升你的设计工具包&#xff1a;使用ChatGPT、Figma和Miro的AI驱动UX/UI策略 50个创新UX提示 了解人工智能的基础知识。介绍ChatGPT及其底层技术。区分不同AI模型及其在设计中的应用。将AI工具融入设计工作流程的策略…

【Java基础】

Java基础常见面试题总结(上) 基础概念与常识 Java 语言有哪些特点? 简单易学&#xff08;语法简单&#xff0c;上手容易&#xff09;&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;平台无关性&#xff08; Java 虚拟机实现…

JAVA期末复习2

目录 一、Java基础知识 1. 下面几个标识符中&#xff0c;哪些是命名正确的 (A) 2. 分析以下代码&#xff0c;哪些是合法的 (C) 3. 以下代码的执行结果是&#xff08; B &#xff09; 4. 下面哪个不是java中的关键字&#xff1f;&#xff08; B &#xff09; 5. 下面对数组…

Javase.图书管理系统基本框架

图书管理系统基本框架 1.核心类介绍2. book包详解2.1 Book 类2.1.2 代码展示2.1.2 代码解析 2.2 BookList 类2.2.2 代码展示2.2.2 代码解析 2.3Book类和BookList类的联系 3. 用户角色与管理3.1 User 类3.1.1 代码展示3.1.2 代码解析 3.2 adminUser 类3.2.1 代码展示3.2.2代码解…

Spring-bean

Spring 网站&#xff1a;spring.io 两个方面&#xff1a; 简化开发&#xff1a; IoCAOP 框架整合&#xff1a; MyBatis SpringFrameWork系统架构&#xff08;上层依赖下层&#xff09; 解决问题&#xff08;代码耦合度高——模块与模块之间的依赖程度&#xff09; 目标&am…

SARscape——中值滤波

目录 一、算法原理1、概述2、参考文献 二、软件操作三、结果展示1、原始图像2、滤波结果 一、算法原理 1、概述 中值滤波是把局部区域中的中间亮度值作为区域中心点像元的输出值。当取定的局部区域为&#xff13;&#xff58;&#xff13;的正方形时&#xff0c;区域共有&…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇WinRS命令WinRM管理RDP终端密码喷射点CrackMapExec

红队内网攻防渗透 1. 内网横向移动1.1 内网横向移动方法分类1.2 WinRM&WinRS1.2.1 利用条件1.2.1.1 探针可用1.2.1.2 连接执行1.2.1.3 CS上线利用1.2.1.3.1 反向连接上线1.2.1.4 CS内置模块1.2.1.5 其他解决1.3 RDP1.3.1 探针连接1.3.2 连接执行1.3 CrackMapExec-密码喷射1…

MyBatis Plus Generator代码生成

一、MyBatis Plus Generator MyBatis Plus是一个功能强大的持久层框架&#xff0c;它简化了MyBatis的使用&#xff0c;提供了许多便捷的功能。其中&#xff0c;MyBatis Plus Generator是一个强大的代码生成器&#xff0c;可以帮助我们快速地根据数据库表结构生成对应的实体类、…

DVWA 靶场 SQL Injection (Blind) 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

微型操作系统内核源码详解系列五(五):cm3下Pendsv切换任务上篇

系列一&#xff1a;微型操作系统内核源码详解系列一&#xff1a;rtos内核源码概论篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列二&#xff1a;微型操作系统内核源码详解系列二&#xff1a;数据结构和对象篇&#xff08;以freertos为例&#xff09;-CSDN博客 系列…

C++初学者指南第一步---8.类型系统(基础)

C初学者指南第一步—8.类型系统&#xff08;基础&#xff09; 文章目录 C初学者指南第一步---8.类型系统&#xff08;基础&#xff09;1.用const声明常量2.类型别名3.类型推导 auto4.常量表达式&#xff1a;constexpr (C11) 1.用const声明常量 语法&#xff1a; Type const v…

君子小人的格局、境界

子曰&#xff1a;君子怀德&#xff0c;小人怀土&#xff1b;君子怀刑&#xff0c;小人怀惠。 直译&#xff1a;君子怀念道德&#xff0c;小人怀念乡土&#xff1b;君子关心法度&#xff0c;小人关心恩惠。 这里的君子与小人只是体现格局、境界的不同&#xff1b; 君子怀的是德…

Windows环境利用 OpenCV 中 CascadeClassifier 分类器识别人眼 c++

Windows环境中配置OpenCV 关于在Windows环境中配置opencv的说明&#xff0c;具体可以参考&#xff1a;VS2022 配置OpenCV开发环境详细教程。 CascadeClassifier 分类器 CascadeClassifier 是 OpenCV 库中的一个类&#xff0c;它用于实现一种快速的物体检测算法&#xff0c;称…

一些3D数据集的简单介绍

一、Objaverse 1.0 Objaverse 1.0: a large dataset of objects with 800K (and growing) 3D models with descriptive captions, tags and animations. Assets not only belong to varied categories like animals, humans, and vehicles, but also include interiors and ex…

【课程总结】Day10:卷积网络的基本组件

前言 由于接下来的课程内容将围绕计算机视觉展开&#xff0c;其中接触最多的内容是卷积、卷积神经网络等…因此&#xff0c;本篇内容将从卷积入手&#xff0c;梳理理解&#xff1a;卷积的意义、卷积在图像处理中的作用以及卷积神经网络的概念&#xff0c;最后利用pytorch搭建一…

Vue76-路由对浏览器历史记录的影响

一、push模式 默认是push 二、replace模式 替换当前记录&#xff01; &#xff08;当前指针指向的那一条记录&#xff09; 三、小结

只有一个鸿蒙好?还是鸿蒙、安卓、IOS并存好?

这个话题&#xff0c;现在很敏感&#xff0c;为了防止被喷&#xff0c;我提前且清楚的交待我的观点&#xff1a;我双手欢迎鸿蒙、欢迎仓颉&#xff0c;而且我已经用行动来支持&#xff0c;比如2021年刚发布ArkUI时&#xff0c;我就第一时间上手了&#xff0c;且这几年一直在跟进…

图解Transformer

图解Transformer Transformer模型是在论文《Attention is All You Need》中提出的。它的TensorFlow实现作为Tensor2Tensor包的一部分是可用的。哈佛大学的自然语言处理小组创建了一个指南&#xff0c;用PyTorch实现对论文进行了注释。在这篇文章中&#xff0c;我们将尝试简化一…

【IEEE独立出版、有确定的ISBN号】第三届能源与电力系统国际学术会议 (ICEEPS 2024)

第三届能源与电力系统国际学术会议 (ICEEPS 2024) 2024 3rd International Conference on Energy and Electrical Power Systems 连续2届会后4-5个月EI检索&#xff0c;检索稳定&#xff01; 成功申请IEEE出版&#xff01; 特邀院士、Fellow 报告&#xff01; 一、大会信息 …