当前位置: 首页 > article >正文

Sequelize ORM sql 语句工具

Sequelize ORM sql 语句工具

sequelize orm中文网
视频学习@长乐未央

初始化配置

Sequelize orm 配置文章@落日沉溺于海

  1. 在命令行中全局安装
npm i -g sequelize-cli
  1. sequelize 执行需要匹配 mysql2 对应的依赖(安装 mysql2)
npm i sequelize mysql2
  1. 初始化项目
sequelize init
  1. 熟悉初始化项目后的项目结构
  • config:时配置的意思,这里放的也就是 sequelize 所需要的连接数据库的配置文件
  • migrations:是迁移的意思,如果你需要对数据库做新增表,修改字段,删除表等操作,就需要在这里添加迁移文件了。而不是像以前那样,使用客户端软件直接操作数据库
  • models:这里面存放的模型文件,当我们使用 sequelize 来执行增删改查时,就需要用这里的模型文件了,每个模型都对应数据库中的一张表。
  • seeders:是存放种子文件。一般会将一些需要添加到数据表的测试数据存放在这里。只需要执行一个命令,数据表中就回自动填充进一些用来测试内容的了。
  1. 配置 config.js 文件
  • 第一个要改的就是密码,修改成 docker 配置里,我们设定的密码。接着要改的是数据库的名字,改为 clwy_api_development。
  • 最下面,还要加上时区的配置,因为我们中国是在+8 区。这样在查询的时候,时间才不会出错。
  • 那么同样的,也简单的给 test 和 production 也调整一下。

注意:json 文件中都必须为字符串要不有可能会报错。

  • The “data” argument must be one of type string, TypedArray, or DataView. Received type number (我将password配置为了 number,所以有了这个报错。改成 string 类型即可。)
{
  "development": {
    "username": "root",
    "password": "",
    "database": "yourmysql",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "timezone": "+08:00"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "yourtestmysql",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "timezone": "+08:00"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "yourproductionmysql",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "timezone": "+08:00"
  }
}
  1. 使用 ORM 创建一个表
sequelize model:generate --name Article --attributes title:string,content:text
  1. 运行迁移
sequelize db:migrate
  1. 种子文件
sequelize seed:generate --name article

完成后,在 seeds 目录,就看到刚才命令新建的种子文件了。同样也是分为两个部分,up 部分用来填充数据,down 部分是反向操作,用来删除数据的。

种子文件改写代码如下

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, {});
},
  1. 运行种子
sequelize db:seed --seed xxx-article

sequelize 简化接口封装案例

  1. 在执行完上面操作(创建models,运行种子文件)后,进行下面接口封装

/admin/articles 文件代码

const express = require("express");
const router = express.Router();
const { Article } = require("../../models");
const { Op } = require("sequelize");
/* GET home page. */

router.get("/getArticlesList", async function (req, res, next) {
  try {
    const query = req.query;
    const currentPage = Math.abs(Number(query.currentPage) || 1);
    const pageSize = Math.abs(Number(query.pageSize) || 10);
    /*
     变量定义
      offset 从那一页开始
      limit 查询多少条
      currentPage 当前页
    分页查询公式
      offset = (currentPage - 1) * limit
  */
    const offset = (currentPage - 1) * pageSize;
    const condition = {
      // order: [["id", "DESC"]], // 根据id 倒序排列。数组套数组 是可以根据多个字段进行排列
      limit: pageSize,
      offset,
    };

    // 根据所传参数进行 模糊查询
    if (query.title) {
      condition.where = {
        title: { [Op.like]: `%${query.title}%` },
      };
    }
    // 查询所有参数
    // const list = await Article.findAll(condition);
    // 根据数量查询
    const { count, rows } = await Article.findAndCountAll(condition);
    //   const list = [];
    res.json({
      code: 200,
      data: {
        list: rows,
        pagination: { currentPage, pageSize, totalCount: count }, // 返回总页数和当前页码,用于前端分页ti
      },
      message: "获取文章列表成功",
    });
  } catch (err) {
    res.json({ code: 500, message: err });
  }
});

module.exports = router;

// 创建文章

router.post("/createArticle", async function (req, res, next) {
  // 白名单过滤 ,避免用户乱填 id
  const body = {
    title: req.body.title,
    content: req.body.content,
  };
  const article = await Article.create(body);
  res.json({
    code: 201,
    message: "文章创建成功",
    data: article,
  });
});

// 删除文章

router.delete("/deleteArticle/:id", async function (req, res) {
  const id = req.params.id;
  // 查询文章 ,看是否存在
  const article = await Article.findByPk(id);

  if (!article) {
    res.json({ code: 404, message: "文章不存在" });
    return false;
  }
  await article.destroy(id);
  res.json({ status: true, code: 204, message: "删除成功" });
});

// 更新文章

router.put("/updateArticle/:id", async function (req, res) {
  const id = req.params.id;
  // 查询文章 ,看是否存在
  const article = await Article.findByPk(id);
  console.log("article", article);

  if (!article) {
    res.json({ code: 404, message: "文章不存在" });
    return false;
  }
  // 白名单过滤 ,避免用户乱填 id
  const body = {
    title: req.body.title,
    content: req.body.content,
  };
  await article.update(body);
  res.json({ status: true, code: 204, message: "更新成功", data: article });
});

sequelize 指令执行相关报错

  1. Unable to resolve sequelize package in C:\Users\ , 无法解析 C:\Users\中的 sequelize 包. 依次执行下面指令
    • npm install sequelize-cli -g
    • sequelize -h ,显示 Unable to resolve sequelize package in C:\Users\
    • npm install --save sequelize

http://www.kler.cn/a/449602.html

相关文章:

  • LeetCode 343.整数拆分
  • 《智启新材:人工智能重塑分子结构设计蓝图》
  • C++的侵入式链表
  • 电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决
  • 拦截器魔法:Spring MVC中的防重放守护者
  • 在 Ubuntu 下使用 Tauri 打包 EXE 应用
  • 安装MongoDB,环境配置
  • 对于其他管理的理解(下)
  • C#调用WebService的方法
  • 基于 SSM 架构的 JAVA 网络直播带货查询系统设计与 JSP 实践成果
  • 轻量型 5G DTU 选型
  • 记Fastjson2的一个报ConcurrentModificationException的bug
  • 带通/带阻滤波器
  • 云原生周刊:利用 eBPF 增强 K8s
  • CSDN实现免登录复制-油猴制作全过程
  • 电脑无法开机的解决方案
  • 【Maven】Maven的快照库和发行库
  • Chrome 关闭自动添加https
  • 记录vue+elementUI table的组件
  • Android 系统源码 Bootable Recovery 目录下 Updater 技术架构详解
  • java 实现排序的几种方式
  • React Refs 完整使用指南
  • ansible的流程控制
  • 重温设计模式--观察者模式
  • postman读取文件执行
  • 模型并行分布式训练 Megatron (3) ---模型并行实现