17 数据库集成与ORM使用之使用Sequelize进行ORM操作

在上一篇文章中,我们讨论了关系型数据库与MongoDB的基本概念和区别。本篇将重点介绍如何使用 Sequelize 作为ORM(对象关系映射)工具来与关系型数据库进行交互。 Sequelize 是一个承载于 Node.js 的基于 Promise 的 ORM,支持多个数据库,如 PostgreSQLSQLiteMySQLMariaDB 等。

1. 安装Sequelize及数据库驱动

首先,我们需要在项目中安装 Sequelize 和相应的数据库驱动。例如,如果你使用 MySQL,可以使用以下命令:

1
npm install sequelize mysql2

对于 PostgreSQL,可以使用:

1
npm install sequelize pg pg-hstore

安装完成后,你可以在代码中引入 Sequelize

1
2
3
4
5
6
7
const { Sequelize } = require('sequelize');

// 使用MySQL连接
const sequelize = new Sequelize('database', 'username', 'password', {
host: 'localhost',
dialect: 'mysql', // 或 'sqlite', 'postgres', 'mariadb', 'mssql'
});

2. 定义模型

在ORM中,我们使用模型来映射数据库表。以下是使用 Sequelize 定义一个用户模型的示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const { Model, DataTypes } = require('sequelize');

class User extends Model {}

User.init({
// 定义模型属性
username: {
type: DataTypes.STRING,
allowNull: false,
unique: true
},
password: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true
}
}, {
sequelize, // 传入连接实例
modelName: 'User' // 模型名字
});

在这个示例中,我们定义了一个 User 模型,包含 usernamepasswordemail 属性。

3. 同步数据库

在定义好模型后,我们可以通过 sync 方法将模型同步到数据库中。请注意,这将创建数据库表,如果表已存在,则会根据选项来决定如何处理。

1
2
3
4
5
6
7
8
(async () => {
try {
await sequelize.sync({ force: true }); // force: true 会掉掉表再重建
console.log("Database & tables created!");
} catch (err) {
console.error("Failed to create database:", err);
}
})();

在生产环境中,不建议使用 force: true,因为这会丢失已有的数据。

4. 增删改查操作

4.1 创建记录

现在,您可以使用模型来创建新记录:

1
2
3
4
5
6
7
8
(async () => {
const newUser = await User.create({
username: 'john_doe',
password: 'password123',
email: 'john@example.com'
});
console.log("User created:", newUser.toJSON());
})();

4.2 查找记录

查找用户的方法如下:

1
2
3
4
5
const users = await User.findAll();
console.log("All users:", JSON.stringify(users, null, 2));

const specificUser = await User.findOne({ where: { username: 'john_doe' } });
console.log("Specific user:", specificUser.toJSON());

4.3 更新记录

更新记录非常简单,只需要查找记录后进行修改:

1
2
3
specificUser.email = 'john_doe@example.com';
await specificUser.save();
console.log("User updated:", specificUser.toJSON());

4.4 删除记录

可以通过 destroy 方法删除记录:

1
2
await specificUser.destroy();
console.log("User deleted.");

5. 关系模型

Sequelize 还支持关联模型,例如一对多、多对多等关系。以下是一个示例,展示如何定义一对多关系:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Post extends Model {}

Post.init({
title: {
type: DataTypes.STRING,
allowNull: false,
},
content: {
type: DataTypes.TEXT,
allowNull: false,
},
}, {
sequelize,
modelName: 'Post',
});

// 定义关系
User.hasMany(Post, { as: 'posts' });
Post.belongsTo(User);

通过以上模型结构,您可以轻松地关联用户和他们的帖子。

6. 结尾

本篇文章详细介绍了如何使用 Sequelize 进行ORM操作,包括模型定义、基本的CRUD操作和模型关联。通过这些功能,您可以高效地与关系型数据库交互,并简化您的数据库操作代码。

在下一篇文章中,我们将讨论数据库迁移和模型设计的高级主题,进一步提升您的 Node.js 后端开发技能。希望您能继续关注我们的系列教程!

17 数据库集成与ORM使用之使用Sequelize进行ORM操作

https://zglg.work/nodejs-backend-one/17/

作者

IT教程网(郭震)

发布于

2024-08-15

更新于

2024-08-16

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论