Sequelize 模型查询基础教程:从入门到精通

Sequelize 模型查询基础教程:从入门到精通

【免费下载链接】sequelize-docs-Zh-CN 【免费下载链接】sequelize-docs-Zh-CN 项目地址: https://gitcode.com/gh_mirrors/se/sequelize-docs-Zh-CN

前言

Sequelize 是一个强大的 Node.js ORM 框架,它提供了丰富的查询方法来操作数据库。本教程将详细介绍 Sequelize 中最基础的 CRUD(增删改查)操作,帮助开发者快速上手数据库操作。

创建记录(INSERT)

基本创建方法

使用 Model.create() 方法可以快速创建并保存一条记录:

const user = await User.create({
  username: 'john_doe',
  email: 'john@example.com'
});
console.log(user.id); // 输出自动生成的ID

安全创建记录

在实际应用中,我们经常需要限制可创建的字段,防止恶意数据插入:

const user = await User.create({
  username: 'admin',
  isAdmin: true  // 即使传递了isAdmin,也不会被保存
}, {
  fields: ['username'] // 只允许创建username字段
});

查询记录(SELECT)

查询所有记录

const users = await User.findAll();
console.log(users.length); // 输出用户数量

选择特定字段

User.findAll({
  attributes: ['id', 'username'] // 只查询id和username字段
});

字段重命名和聚合

import { fn, col } from '@sequelize/core';

User.findAll({
  attributes: [
    'id',
    ['username', 'name'], // 将username重命名为name
    [fn('COUNT', col('posts')), 'postCount'] // 计算每个用户的帖子数
  ]
});

条件查询(WHERE)

基础条件查询

User.findAll({
  where: {
    age: {
      [Op.gt]: 18 // 年龄大于18
    }
  }
});

组合条件

const { Op } = require('@sequelize/core');

User.findAll({
  where: {
    [Op.or]: [
      { age: { [Op.lt]: 18 } },
      { age: { [Op.gt]: 65 } }
    ]
  }
});

JSON 数据查询

// 查询meta字段中包含特定JSON结构的记录
User.findAll({
  where: {
    meta: {
      preferences: {
        theme: 'dark'
      }
    }
  }
});

更新记录(UPDATE)

// 将所有未验证的用户标记为已验证
await User.update(
  { verified: true },
  {
    where: {
      verified: false
    }
  }
);

删除记录(DELETE)

// 删除所有未激活的用户
await User.destroy({
  where: {
    active: false
  }
});

批量操作

批量创建

await User.bulkCreate([
  { username: 'user1' },
  { username: 'user2' },
  { username: 'user3' }
]);

批量更新

// 批量增加年龄
await User.increment(
  { age: 1 }, 
  { 
    where: { 
      status: 'active' 
    } 
  }
);

排序和分页

排序

User.findAll({
  order: [
    ['lastName', 'ASC'],  // 按姓氏升序
    ['age', 'DESC']       // 按年龄降序
  ]
});

分页

// 获取第2页,每页10条记录
User.findAll({
  offset: 10,
  limit: 10
});

聚合函数

// 计算用户平均年龄
const avgAge = await User.average('age');

// 计算活跃用户的最小年龄
const minAge = await User.min('age', {
  where: {
    active: true
  }
});

原生SQL查询

当Sequelize提供的功能不足时,可以使用原生SQL:

import { literal } from '@sequelize/core';

User.findAll({
  where: literal('age > 30 AND created_at > NOW() - INTERVAL 1 YEAR')
});

最佳实践

  1. 始终使用事务:对于生产环境的重要操作,务必使用事务保证数据一致性
  2. 限制查询字段:只查询需要的字段,减少数据传输量
  3. 合理使用索引:为常用查询条件创建索引
  4. 批量操作优化:大量数据操作时使用批量方法
  5. 参数化查询:防止SQL注入攻击

总结

本教程详细介绍了Sequelize中最基础的CRUD操作,涵盖了从简单的插入查询到复杂的条件组合。掌握这些基础知识后,开发者可以高效地进行大多数常见的数据库操作。在实际项目中,应根据具体需求选择合适的查询方法,并注意性能优化和数据安全。

【免费下载链接】sequelize-docs-Zh-CN 【免费下载链接】sequelize-docs-Zh-CN 项目地址: https://gitcode.com/gh_mirrors/se/sequelize-docs-Zh-CN

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值