深入探索 Sequelize 的模式和模型使用

Sequelize 是一个基于 Promise 的 Node.js ORM,支持 Postgres、MySQL、MariaDB、SQLite 和 Microsoft SQL Server。它提供了一种高效的方式来管理和与数据库交互,抽象复杂的 SQL 查询,提供了用于 CRUD 操作的简单易用方法等等。本文将通过一个实际场景------管理电子邮件数据,深入探讨 Sequelize 中模式和模型的使用。

定义模型

在 Sequelize 中,模型代表数据库中的表。通过指定模型名称和属性来定义模型,每个属性代表表中的一列。考虑以下示例,它展示了模型定义过程:

javascript 复制代码
const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  dialect: 'yourDialect',
});

const Mail = sequelize.define('Mail', {
  subjectDailyReport: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  sendTime: {
    type: Sequelize.DATE,
    allowNull: false,
  },
  // 这里可以定义更多属性
});

此代码段概述了创建一个具有两个字段 subjectDailyReportsendTimeMail 模型。define 方法接受三个参数:模型名称、模型属性和可选的模型选项。

CRUD 操作

Sequelize 模型提供了多种方法来执行 CRUD 操作。这些方法在直接 SQL 查询上提供了高层次的抽象,使数据库交互更直观,减少错误发生。

创建

使用 create 方法向数据库添加新记录。此方法将新行插入到相应的表中:

javascript 复制代码
const createpreSutBooking = async (subjectDailyReport, sendTime) => {
  try {
    const mail = await Mail.create({ subjectDailyReport, sendTime });
    return mail;
  } catch (error) {
    throw error;
  }
};
读取

使用 findOne 方法(用于获取单条记录)和 findAll 方法(用于获取多条记录)可以从数据库检索数据。以下示例演示了获取最近创建的 Mail 记录:

javascript 复制代码
const getpreSutBooking = async () => {
  try {
    const mail = await Mail.findOne({ order: [['createdAt', 'ASC']] });
    return mail;
  } catch (error) {
    throw error;
  }
};
更新

使用 update 方法更新现有记录。此方法对匹配提供的条件的记录应用更新:

javascript 复制代码
const savepreSutBooking = async (data) => {
  try {
    const { subjectDailyReport, sendTime } = data;
    const mail = await Mail.findOne({ order: [['createdAt', 'ASC']] });
    if (mail) {
      const updatedRecord = await mail.update({ subjectDailyReport, sendTime });
      return updatedRecord;
    } else {
      return '没有找到匹配的记录'; // 'No matching record found'
    }
  } catch (error) {
    throw error;
  }
};
删除

使用 destroy 方法从数据库中移除记录。它删除符合指定条件的记录:

javascript 复制代码
const deletepreSutBooking = async () => {
  try {
    await Mail.destroy({ where: {} });
  } catch (error) {
    throw error;
  }
};

此外,为了完全清空表,可以在 destroy 方法中使用 truncate 选项来移除所有记录并重置任何自增值。

结论

Sequelize 提供了一整套强大的特性,用于数据库模式和模型管理,大大简化了执行 CRUD 操作的过程。通过抽象直接的 SQL 查询,Sequelize 允许更可维护和可读的代码,使其成为涉及关系数据库的 Web 应用开发的绝佳选择。

相关推荐
CodexDave4 小时前
MySQL事务隔离级别与MVCC机制解析
前端·数据库·mysql·nginx·性能优化·负载均衡
星栈6 小时前
Node 接口该写同步还是异步?
后端·node.js
王琦03186 小时前
生产环境中使用通用二进制包安装
mysql
蓝田~9 小时前
MySQL慢查询怎么优化?B+Tree索引原理+MVCC读不阻塞写+EXPLAIN执行计划,从5秒到0.05秒
数据库·mysql
Herbert_hwt9 小时前
MySQL学习前言:关于MySQL的历史与当下学习的必要性
mysql
时间的拾荒人10 小时前
MySQL 视图详解
android·数据库·mysql
半个落月10 小时前
用 LangChain 连接远程 MCP:从工具发现到多轮调用闭环
人工智能·后端·node.js
尽兴-11 小时前
企业数据库选型与演进:Oracle、达梦、MySQL 与分库分表实践
数据库·mysql·oracle·分库分表
IT瑞先生12 小时前
Docker快速部署Mysql的三种方法——实操篇
mysql·adb·docker
数据库小学妹13 小时前
MySQL在线DDL实战:ALGORITHM三种算法对比+gh-ost变更管理SOP
mysql·dba·数据库运维·在线ddl·mdl锁·sql变更管理