Sequelize.js:一个基于 promise 的 Node.js ORM

简介: Sequelize.js:一个基于 promise 的 Node.js ORM

中文文档摘要:


Sequelize 是一个基于 promise 的 Node.js ORM, 目前支持 Postgres, MySQL, MariaDB, SQLite 以及 Microsoft SQL Server. 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。


文档


中文:https://www.sequelize.com.cn/

英文:https://sequelize.org/

npm: https://www.npmjs.com/package/sequelize

github: https://github.com/sequelize/sequelize

安装


$ node -v
v16.14.0
pnpm i sequelize mysql2

依赖 package.json

{
  "type": "module",
  "dependencies": {
    "mysql2": "^2.3.3",
    "sequelize": "^6.21.3"
  }
}

定义模型


import { Sequelize, DataTypes } from "sequelize";
// 连接到数据库
const sequelize = new Sequelize("mysql://root:123456@127.0.0.1:3306/data");
// sequelize.define(modelName, attributes, options)
const User = sequelize.define(
  "User",
  {
    name: DataTypes.STRING,
    age: DataTypes.INTEGER,
  },
  {
    // 表名
    tableName: "table_user",
    // 时间戳,默认createdAt/updatedAt
    timestamps: false,
    createdAt: "create_time",
    updatedAt: "update_time",
  }
);

CURD示例


async function createRow() {
  const user = await User.create({ name: "Jane", age: 23 });
  // INSERT INTO `table_user` (`id`,`name`,`age`) VALUES (DEFAULT,?,?);
  console.log(user.toJSON());
  // { id: 8, name: 'Jane', age: 23 }
}
async function selectRow() {
  const user = await User.findByPk(3);
  // SELECT `id`, `name`, `age` FROM `table_user` AS `User` WHERE `User`.`id` = 3;
  console.log(user.toJSON());
  // { id: 3, name: 'Tom', age: 23 }
}
async function selectRows() {
  const users = await User.findAll();
  // SELECT `id`, `name`, `age` FROM `table_user` AS `User`;
  console.log(users.map((user) => user.toJSON()));
  // [
  //   { id: 2, name: 'Tom', age: 23 },
  // ]
}
async function updateRow() {
  const result = await User.update(
    { name: "Doe" },
    {
      where: {
        id: 1,
      },
    }
  );
  // UPDATE `table_user` SET `name`=? WHERE `id` = ?
  console.log(result);
  // [ 1 ]
}
async function deleteRow() {
  await User.destroy({
    where: {
      id: 1,
    },
  });
  // DELETE FROM `table_user` WHERE `id` = 1
}
(async () => {
  // await createRow()
  // await selectRow();
  // await selectRows();
  // await updateRow();
  // await deleteRow();
})();
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
存储 Dragonfly 弹性计算
2023年阿里云服务器8核16G配置收费标准与活动价格参考,价格2849.76元1年起
一般来说企业用户在选择云服务器配置的时候,8核16G配置是选择比较多的,2023年新用户租用阿里云轻量应用服务器低至108元首年,8核16G配置目前活动价格仅需2849.76元1年起,不过阿里云不同实例类型的8核16G云服务器配置,产品价格也各不相同。而在平时购买和活动期间买价格也是不一样的。本文主要为大家介绍目前阿里云服务器8核16G配置收费标准与活动价格,以供参考。
1035 0
2023年阿里云服务器8核16G配置收费标准与活动价格参考,价格2849.76元1年起
|
前端开发 JavaScript UED
"前端小技巧大揭秘:JS如何将后台时间戳秒变亲切小时前、分钟前,让用户秒懂,提升互动体验!"
【10月更文挑战第23天】在Web开发中,将后台返回的时间戳转换为“小时前”、“分钟前”、“刚刚”等友好的时间描述是常见需求。本文介绍如何用JavaScript实现这一功能,通过计算当前时间和时间戳的差值,返回相应的描述,提升用户体验。
269 1
|
安全 网络安全 网络架构
【揭秘】大佬如何玩转内网与外联单位互访?SNAT+DNAT实战揭秘,让你的网络畅通无阻!
【8月更文挑战第19天】内网与外联单位间的访问是企业网络的关键需求。通过SNAT和DNAT技术可巧妙解决此问题。SNAT修改源IP地址,隐藏内网真实身份;DNAT改变目的IP地址,实现外部对内网服务器的访问。
443 0
|
前端开发 Windows
HTML+CSS制作Windows启动加载动画
HTML+CSS制作Windows启动加载动画
|
网络协议 程序员 API
[笔记] Microsoft Windows网络编程《一》WinSock简介(二)
[笔记] Microsoft Windows网络编程《一》WinSock简介(二)
323 0
外贸出口单据之:PI(Proforma Invoice)
外贸出口单据之:PI(Proforma Invoice)
2685 1
|
安全 开发工具 Android开发
Android上传图片到七牛云看这篇就够了
Android上传图片到七牛云看这篇就够了
|
弹性计算 Cloud Native JavaScript
云原生游戏开服时间模拟工具 - fake-time-injector
当游戏服完成云原生化改造,进行模拟时间设置的时候,就会遇到一些问题。因为默认情况下Pod的时间是继承ECS的时间设置的。如果直接修改ECS的时间,会影响该节点所有的Pod,这对于测试环境而言是不可接受的,需要不影响其他节点的Pod时间修改方式。fake-time-injector是阿里云与莉莉丝游戏通过CloudNativeGame社区一起开源的用于云原生场景下修改模拟时间的组件,协助游戏运维人员简单快速完成开服模拟时间测试。
845 0
|
机器人 数据安全/隐私保护 Python
Cobalt Strike的多种上线提醒方法(上)
Cobalt Strike的多种上线提醒方法
803 0