18 使用 Sequelize 操作数据库

在上一篇教程中,我们介绍了如何连接和操作 MongoDB 数据库。这一篇,我们将聚焦于使用 Sequelize 操作关系型数据库,例如 MySQLPostgreSQLSQLite 等。Sequelize 是一个基于 Promise 的 Node.js ORM(对象关系映射)库,它简化了与数据库间的交互,使得我们可以通过 JavaScript 代码方便地进行数据操作。

1. 安装 Sequelize 和数据库驱动

首先,我们需要安装 Sequelize 和相应的数据库驱动。以 MySQL 为例,运行以下命令安装:

1
npm install sequelize mysql2

如果你使用其他数据库,例如 PostgreSQL,则可以安装 pgpg-hstore

1
npm install sequelize pg pg-hstore

2. 初始化 Sequelize 实例

我们可以通过以下方式初始化 Sequelize 实例:

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

// 创建 Sequelize 实例,连接数据库
const sequelize = new Sequelize('数据库名称', '用户名', '密码', {
host: 'localhost',
dialect: 'mysql' // 或者 'postgres', 'sqlite', 'mariadb' 等
});

在上述代码中,请将 '数据库名称''用户名''密码' 替换为你自己的数据库信息。

3. 测试数据库连接

在使用 Sequelize 操作数据库之前,我们应该确认数据库连接是否成功。可以使用以下代码进行测试:

1
2
3
4
5
6
7
8
9
10
async function testConnection() {
try {
await sequelize.authenticate();
console.log('数据库连接成功');
} catch (error) {
console.error('无法连接到数据库:', error);
}
}

testConnection();

4. 定义模型

Sequelize 中,我们可以通过定义模型来描述数据库表。接下来,我们创建一个用户模型 User,它将对应于数据库中的 users 表。

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

// 定义用户模型
const User = sequelize.define('User', {
name: {
type: DataTypes.STRING,
allowNull: false,
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
}, {
tableName: 'users', // 实际表名
timestamps: true, // 自动创建时间戳字段 createdAt 和 updatedAt
});

5. 同步模型

一旦定义好模型,可以使用 sync 方法创建对应的数据库表:

1
2
3
4
5
6
async function syncDatabase() {
await User.sync();
console.log('数据库表已同步');
}

syncDatabase();

6. 数据库操作示例

现在我们可以进行基本的数据库操作,例如 CRUD(创建、读取、更新、删除)。以下是一些示例。

6.1 创建记录

你可以使用 create 方法创建一条用户记录:

1
2
3
4
5
6
7
8
9
10
async function createUser() {
const newUser = await User.create({
name: '张三',
email: 'zhangsan@example.com',
password: 'password123',
});
console.log('用户创建成功:', newUser.toJSON());
}

createUser();

6.2 读取记录

使用 findAll 方法可以读取所有用户记录:

1
2
3
4
5
6
async function getAllUsers() {
const users = await User.findAll();
console.log('所有用户:', users.map(user => user.toJSON()));
}

getAllUsers();

6.3 更新记录

更新用户记录非常简单,只需通过 update 方法:

1
2
3
4
5
6
7
8
9
10
11
12
async function updateUser(id) {
const [updated] = await User.update({ name: '李四' }, {
where: { id: id },
});
if (updated) {
console.log(`用户ID为${id}的用户已更新`);
} else {
console.log(`用户ID为${id}的用户未找到`);
}
}

updateUser(1); // 假设更新ID为1的用户

6.4 删除记录

删除用户记录使用 destroy 方法:

1
2
3
4
5
6
7
8
9
10
11
12
async function deleteUser(id) {
const deleted = await User.destroy({
where: { id: id },
});
if (deleted) {
console.log(`用户ID为${id}的用户已删除`);
} else {
console.log(`用户ID为${id}的用户未找到`);
}
}

deleteUser(1); // 假设删除ID为1的用户

7. 处理查询结果

在处理查询结果时,我们可以使用各种查询选项来满足需求。例如,使用 where 子句进行条件查询:

1
2
3
4
5
6
7
8
9
10
async function getUserByEmail(email) {
const user = await User.findOne({ where: { email: email } });
if (user) {
console.log('找到用户:', user.toJSON());
} else {
console.log('用户未找到');
}
}

getUserByEmail('zhangsan@example.com');

结语

在这一篇中,我们介绍了如何使用 Sequelize 操作数据库,包括连接数据库、定义模型、执行基本的 CRUD 操作等。这些操作为后续的功能开发提供了坚实的基础。

在下一篇教程中,我们将讨论部署与优化,并探讨如何选择合适的部署平台,让你的 Node.js 应用能够在生产环境中高效运行。请继续关注!

18 使用 Sequelize 操作数据库

https://zglg.work/node-js-you-need/18/

作者

AI免费学习网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论