Jupyter AI

18 使用 Sequelize 操作数据库

📅 发表日期: 2024年8月10日

分类: 🟩Node.js 必备

👁️阅读: --

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

1. 安装 Sequelize 和数据库驱动

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

npm install sequelize mysql2

如果你使用其他数据库,例如 PostgreSQL,则可以安装 pgpg-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 应用能够在生产环境中高效运行。请继续关注!