18 使用 Sequelize 操作数据库
在上一篇教程中,我们介绍了如何连接和操作 MongoDB 数据库。这一篇,我们将聚焦于使用 Sequelize
操作关系型数据库,例如 MySQL
、PostgreSQL
、SQLite
等。Sequelize
是一个基于 Promise 的 Node.js ORM(对象关系映射)库,它简化了与数据库间的交互,使得我们可以通过 JavaScript 代码方便地进行数据操作。
1. 安装 Sequelize 和数据库驱动
首先,我们需要安装 Sequelize
和相应的数据库驱动。以 MySQL
为例,运行以下命令安装:
npm install sequelize mysql2
如果你使用其他数据库,例如 PostgreSQL
,则可以安装 pg
和 pg-hstore
:
npm install sequelize pg pg-hstore
2. 初始化 Sequelize 实例
我们可以通过以下方式初始化 Sequelize
实例:
const { Sequelize } = require('sequelize');
// 创建 Sequelize 实例,连接数据库
const sequelize = new Sequelize('数据库名称', '用户名', '密码', {
host: 'localhost',
dialect: 'mysql' // 或者 'postgres', 'sqlite', 'mariadb' 等
});
在上述代码中,请将 '数据库名称'
、'用户名'
和 '密码'
替换为你自己的数据库信息。
3. 测试数据库连接
在使用 Sequelize
操作数据库之前,我们应该确认数据库连接是否成功。可以使用以下代码进行测试:
async function testConnection() {
try {
await sequelize.authenticate();
console.log('数据库连接成功');
} catch (error) {
console.error('无法连接到数据库:', error);
}
}
testConnection();
4. 定义模型
在 Sequelize
中,我们可以通过定义模型来描述数据库表。接下来,我们创建一个用户模型 User
,它将对应于数据库中的 users
表。
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
方法创建对应的数据库表:
async function syncDatabase() {
await User.sync();
console.log('数据库表已同步');
}
syncDatabase();
6. 数据库操作示例
现在我们可以进行基本的数据库操作,例如 CRUD
(创建、读取、更新、删除)。以下是一些示例。
6.1 创建记录
你可以使用 create
方法创建一条用户记录:
async function createUser() {
const newUser = await User.create({
name: '张三',
email: 'zhangsan@example.com',
password: 'password123',
});
console.log('用户创建成功:', newUser.toJSON());
}
createUser();
6.2 读取记录
使用 findAll
方法可以读取所有用户记录:
async function getAllUsers() {
const users = await User.findAll();
console.log('所有用户:', users.map(user => user.toJSON()));
}
getAllUsers();
6.3 更新记录
更新用户记录非常简单,只需通过 update
方法:
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
方法:
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
子句进行条件查询:
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 应用能够在生产环境中高效运行。请继续关注!