Sequelize入门及简单的增删改查

news2025/2/7 14:26:12

前言

学习一下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的简单了解,之后有更深的了解再继续分享

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于YOLOv5的交通标志检测的设计与实现

简介 在智能交通系统中,交通标志的准确检测与识别对提高道路安全和交通效率至关重要。为了实现这一目标,我们开发了一种基于YOLOv5目标检测模型的交通标志检测系统。本报告将详细介绍该系统的实际应用与实现,包括系统架构、功能实现、使用说明、检测示例、数据集获取与介绍…

通信系统网络架构_1.局域网网络架构

当今&#xff0c;通信网络从大的方面主要包括局域网、广域网、移动通信网等网络形式。不同的网络会采用不同的技术进行网络构建。以下针对不同的网络给出各自的网络架构以及所采用的技术。 1.概述 局域网&#xff0c;即计算机局部区域网络&#xff0c;是一种为单一机构所拥有的…

运维.云技术学习.基于应用服务网格的灰度发布(上:理论基础篇)

运维专题 基于应用服务网格的灰度发布&#xff08;上&#xff1a;理论基础篇&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAdd…

CVPR‘24 最佳学生论文,从灵感到成稿仅用一个月,源自业余创意!

北京时间6月20日凌晨&#xff0c;CVPR 2024正式公布了最佳论文和最佳学生论文等奖项。 其中&#xff0c;最佳论文有两篇&#xff0c;分别是BioCLIP和Mip-Splatting。 据Mip-Splatting论文的第一作者Zehao Yu的导师、图宾根大学教授Andreas Geiger透露&#xff0c;这篇论文从想法…

CompletableFuture 基本用法

一、 CompletableFuture简介 CompletableFuture 是 Java 8 引入的一个功能强大的类&#xff0c;用于异步编程和并发处理。它提供了丰富的 API 来处理异步任务的结果&#xff0c;支持函数式编程风格&#xff0c;并允许通过链式调用组合多个异步操作。 二、CompletableFuture中…

Rocky Linux archive下载地址

Index of /vault/rocky/https://dl.rockylinux.org/vault/rocky/

【人工智能】—XGBoost算法在构建互联网防火墙异常行为识别模型应用案例

摘要&#xff1a; 近年来&#xff0c;各地党委、政府加快推进新型工业化&#xff0c;部署实施制造强市战略&#xff0c;提出工业企业“智改数转”是推动全市工业经济稳增长的重要引擎&#xff0c;更是稳增长、促发展的重要抓手。今天博主就以互联网防火墙异常行为识别为例给大家…

【Streamlit学习笔记】Streamlit-ECharts箱型图添加均值和最值label

Streamlit-ECharts Streamlit-ECharts是一个Streamlit组件&#xff0c;用于在Python应用程序中展示ECharts图表。ECharts是一个由百度开发的JavaScript数据可视化库Apache ECharts 安装模块库 pip install streamlitpip install streamlit-echarts绘制箱型图展示 在基础箱型…

内容安全复习 7 - 对抗攻击与防御

文章目录 概述攻击对抗性攻击的目的攻击的损失函数如何攻击FGSM黑盒与白盒真实世界的攻击 防御被动防御主动防御 概述 动机 &#xff08;1&#xff09;不仅要在实验室中部署机器学习分类器&#xff0c;也要在现实世界中部署&#xff1b;实际应用 &#xff08;2&#xff09;分类…

从一到无穷大 #29 ByteGraph的计算,内存,存储三级分离方案是否可以通用化为多模数据库

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言ByteGraph现有架构阿里云Lindorm腾讯YottaDB多模型化修改点ByteGraph论文中的优化…

IOS开发学习日记(十七)

简单的第三方登录和分享功能 第三方登录系统 URL Scheme&#xff1a;App间的跳转及通信 App间跳转场景 登陆系统&#xff1a; 跨平台&#xff0c;跨App 标记用户&#xff0c;个性化的推送 使用第三方登录&#xff08;减少注册成本 / 无须维护敏感信息&#xff09; 微信 / Q…

068、PyCharm 关于Live Template模板

在 PyCharm 编辑器中&#xff0c;Live Templates 是一种功能强大的工具&#xff0c;可以帮助我们快速插入常用的代码片段或模板。 以下是在 PyCharm 中添加 Live Templates 的步骤&#xff1a; 添加 Live Templates 步骤&#xff1a; 打开 PyCharm 编辑器。 转到菜单栏中的 …

33 - 连续出现的数字(高频 SQL 50 题基础版)

33 - 连续出现的数字 -- 开窗函数lead(col,n) 统计窗口内往下第n行值 -- over(partition by xxx) 按照xxx所有行进行分组 -- over(partition by xxx order by aaa) 按照xxx分组&#xff0c;按照aaa排序select distinct num as ConsecutiveNums from(select num,# 从当前记录获…

Python——常用数据降维算法应用

随着数据的积累&#xff0c;数据的维度越来越高&#xff0c;高维的数据在带来更多信息的同时&#xff0c;也带来了信息冗余、计算困难等问题&#xff0c;所以对数据进行合理的降维&#xff0c;并保留主要信息非常重要。这些问题主要可以通过主成分分析及相关的降维算法来解决。…

国内外大模型生态发展报告!

很多同学只知类似Check GPT或者说对国内的一些比较了解&#xff0c;对国外的不太了解&#xff0c;所以在这总结。 1 大模型的发展 左表 名称参数特点发布时间GPT-215亿英文底模&#xff0c;开源2019年Google T5110亿多任务微调, 开源2019年GPT-3.51750亿人工反馈微调2022年M…

《计算机英语》 Unit 6 Internet 互联网

Section A Internet 互联网 The Internet is a global system of interconnected computer networks that use the standard Internet protocol suite (TCP/IP) to link several billion devices worldwide. 互联网是一个全球性的互连计算机网络系统&#xff0c;使用标准的互联…

Echarts实现动态背景

最近在公司工作中&#xff0c;遇到一个图表的需求&#xff0c;要求实现背景图是可以动态跟随最高点而改变位置的。 好玩的是&#xff0c;我实现了效果&#xff0c;但是没在官方配置项看到我这个用法的出处&#xff0c;所以记录一下。 话不多说&#xff0c;配置项也没什么好解释…

Redis的安装及详解

1.Redis介绍&#xff1f; 1.1 Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server,远程字典服务器&#xff09;是一个开源免费的&#xff0c;用C语言编写的一个高性能的分布式内存数据库&#xff0c;基于内存运行并支持持久化的NoSQL数据库。是当前最热门的…

IPv6 address status lifetime

IPv6 地址状态转换 Address lifetime (地址生存期) 每个配置的 IPv6 单播地址都有一个生存期设置&#xff0c;该设置确定该地址在必须刷新或替换之前可以使用多长时间。某些地址设置为“永久”并且不会过期。“首选”和“有效”生存期用于指定其使用期限和可用性。 自动配置的…