📜  m- m sequelize (1)

📅  最后修改于: 2023-12-03 15:17:28.015000             🧑  作者: Mango

程序员必知的 Sequelize ORM

Sequelize 是一个基于 Node.js 的 ORM(Object-Relational Mapping)框架,用于管理 SQL 数据库,例如 MySQL、PostgreSQL、SQLite 和 MS SQL。

安装

在安装之前,请确保已经安装了 Node.js 和对应的数据库驱动程序。以下是安装 Sequelize 的步骤。

使用 NPM 安装
npm install --save sequelize
npm install --save mysql2 # 适用于 MySQL
npm install --save postgres # 适用于 PostgreSQL
npm install --save sqlite3 # 适用于 SQLite
npm install --save tedious # 适用于 MS SQL
使用 Yarn 安装
yarn add sequelize
yarn add mysql2 # 适用于 MySQL
yarn add postgres # 适用于 PostgreSQL
yarn add sqlite3 # 适用于 SQLite
yarn add tedious # 适用于 MS SQL
快速开始

以下是一个使用 Sequelize 建立一个简单的用户数据表的示例:

const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('mysql://root:@localhost:3306/mydatabase');

const User = sequelize.define('User', {
  firstName: {
    type: DataTypes.STRING,
    allowNull: false
  },
  lastName: {
    type: DataTypes.STRING,
    allowNull: false
  }
});

(async () => {
  await sequelize.sync({ force: true });
  const jane = await User.create({
    firstName: "Jane",
    lastName: "Doe"
  });
  console.log(jane.toJSON());
})();

首先,我们需要引入 Sequelize 和相关数据库的驱动程序。然后,我们创建一个 Sequelize 实例并指定数据库连接信息。

接着,我们定义了一个名为 User 的模型,模型包含了两个属性 firstNamelastName,以及一些验证规则。

最后,我们调用了 sequelize.sync 方法用于同步模型到数据库,并创建了一个名为 jane 的用户记录,并打印出来。

模型定义

使用 Sequelize ORM,我们可以在代码层面创建、修改和删除数据库中的表结构以及表之间的关系。以下是一个用户和任务的数据模型定义:

const { Sequelize, Model, DataTypes } = require('sequelize');
const sequelize = new Sequelize('mysql://root:@localhost:3306/mydatabase');

class User extends Model { }
User.init({
  firstName: DataTypes.STRING,
  lastName: DataTypes.STRING,
  email: DataTypes.STRING,
  password: DataTypes.STRING
}, { sequelize, modelName: 'user' });

class Task extends Model { }
Task.init({
  title: DataTypes.STRING,
  description: DataTypes.TEXT,
  completed: DataTypes.BOOLEAN
}, { sequelize, modelName: 'task' });

// 定义关系
User.hasMany(Task);
Task.belongsTo(User);
  • Sequelize:Sequelize 类代表了整个 ORM 框架的入口。使用 Sequelize 类你可以定义数据库连接实例、模型和模型实例等。
  • Model:Model 类代表了数据表中的一行,也就是模型实例。每一个模型实例都对应了一个数据库记录,你可以通过模型实例进行增、删、改、查的操作。一个模型可以扩展其他模型或 Model。
  • DataTypes:DataTypes 是用于定义数据类型的一个对象。Sequelize 支持的数据类型包括:STRING,TEXT,INTEGER,BIGINT,FLOAT,DOUBLE,DECIMAL,BOOLEAN,ENUM,DATE,DATEONLY,TIME,NOW,CHAR,UUID,COMPOSITE 和 JSON。
  • sequelize:sequelize 实例代表了一个数据库连接,是使用 Sequelize 的核心。
  • modelName:modelName 是在 Sequelize 中使用的模型名称。此名称将显示在数据库的表名称中,以小写复数形式存在。
查询数据

查询数据是使用 Sequelize 最常见的操作之一。Sequelize 支持原始查询语句、查询构建器和 Promise 风格的查询方法。

以下是查询所有用户的示例:

const users = await User.findAll();
console.log(users.map(u => u.toJSON()));

以下是查询所有任务并关联其用户的示例:

const tasks = await Task.findAll({ include: User });
console.log(tasks.map(u => u.toJSON()));

在上面的代码中,我们使用了 findAll 方法来查询所有记录,并将结果打印出来。我们还使用了 include 属性来关联 Task 和 User 表,查询时会同时查询两个表的数据。

更新数据

以下是更新一条记录的示例:

const user = await User.findOne({ where: { id: 1 } });
user.firstName = 'John';
user.lastName = 'Doe';
await user.save();

在上面的代码中,我们使用了 findOne 方法来获取 id 为1的用户记录。然后,我们修改了 user 对象的 firstName 和 lastName 属性,并调用 save 方法将其保存到数据库中。

删除数据

以下是删除一条记录的示例:

const user = await User.findOne({ where: { id: 1 } });
await user.destroy();

在上方的代码中,我们使用了 findOne 方法获取 id 为1的用户记录,然后调用了 destroy 方法将其从数据库中删除。