前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sequelize 基本操作

Sequelize 基本操作

作者头像
超超不会飞
发布2020-09-18 10:09:56
2.2K0
发布2020-09-18 10:09:56
举报
文章被收录于专栏:超超不会飞超超不会飞

sequelize 基本操作

Sequelize 是 Node 的一个 ORM(Object-Relational Mapping) 框架,用来方便数据库操作。

配置 sequelize

以 mysql 为例

首先我们要引入npm包,sequelize 依赖 mysql2 作为底层驱动,暴露出自己的 API 让我们调用,在转成 mysql 语句进行执行。

代码语言:javascript
复制
"mysql2": "^1.5.1",
"sequelize": "^4.28.6"
代码语言:javascript
复制
const Sequelize = require('sequelize')

// 连接数据库
const sequelize = new Sequelize('database', 'username', 'password', {
  host: sqlconf.host,
  dialect: 'mysql', // 这里可以改成任意一种关系型数据库

  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000,
  },
})

// 测试连接是否成功
sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.')
  })
  .catch(err => {
    console.log('Unable to connect to the database', err)
  })

// 根据 model自动创建表
sequelize
  .sync()
  .then(() => {
    console.log('init db ok')
  })
  .catch(err => {
    console.log('init db error', err)
  })

我们可以调用sync()根据 model自动在数据库中创建表,也可以不调用,自己手动创。如果使用了 Sequelize 的 Associations,这必须通过 sync() 生成表结构。

创建 model

创建模型,告诉 Sequelize 如何映射数据库表

代码语言:javascript
复制
const UserModel = sequelize.define('user', {
  id: {
    type: Sequelize.INTEGER(11),
    primaryKey: true,            // 主键
    autoIncrement: true,         // 自动递增
  },
  username: Sequelize.STRING(100),
  password: Sequelize.STRING(100),
  createdAt: Sequelize.BIGINT,
  updatedAt: Sequelize.BIGINT,
}, {
  timestamps: false
})

define() 方法的第一个参数为表名,对应的是 users 表。如果不设置 timestamps,Sequlize 会自动为我们添加创建时间和更新时间,我一般选择关闭,手动添加灵活性高些。

增删改查

代码语言:javascript
复制
(async () => {
  const now = Date.now()
  const user = await UserModel.create({
    username: '小张',
    password: 'root',
    createAt: now,
    updateAt: now,
  })
  console.log('创建:' + JSON.stringify(user))
})();

代码语言:javascript
复制
(async () => {
  // 查找所有
  const allUser = await UserModel.findAll()

  // 按id查找
  const oneUser = await UserModel.findById(id)

  // 按条件查询
  const someUser = await UserModel.findAll({
    where: {
      // 模糊查询
      name: {
        $like: '%小%',
      },

      // 精确查询
      password: 'root',
    }
  })

  // 分页查询
  const size = 10 // 每页10条数据
  const page = 1 // 页数
  const pageUser = await UserModel.findAndCountAll({
    where: {
      name: {
        $like: '%小%',
      },
    },
    limit: size,
    offset: size * (page - 1),
  })
})();

代码语言:javascript
复制
(async () => {
// 方法一
await UserModel.upert(data)  // data 里面如果带有 id 则更新,不带则新建

// 方法二
const user = await UserModel.findById(id)
user.update(data)
})()

代码语言:javascript
复制
(async () => {
// 方法一
// 删除所有名字带’小‘的用户
await UserModel.destroy({
  where: {
    username: '小',
  },
})

// 方法二
const user = await UserModel.findById(id)
user.destroy()
})()

关联表

Sequelize 提供了一对一,一对多,多对多等关联表操作,我用的不多,这里只介绍 hasMany() 这一种,其他的可以看文档

设置

首先要在 model 中设置

代码语言:javascript
复制
const School = sequelize.define('school', {
  id: {
    type: Sequelize.INTEGER(11),
    primaryKey: true,
    autoIncrement: true,
  },
  username: Sequelize.STRING(100),
})

const Student = sequelize.define('student', {
    id: {
    type: Sequelize.INTEGER(11),
    primaryKey: true,
    autoIncrement: true,
  },
  username: Sequelize.STRING(100),
})

School.hasMany(Student, {as: 'student', foreignKey: 'schoolId'})

as 参数重新定义了目标model的名字。foreignKey 参数定义了在 t_student 表中关联 key 的名字。

关联查

如果我们想查找一个学校和这个学校中所有的学生信息,可以这样找:

代码语言:javascript
复制
(async () => {
  const group = await School.findById(id, {
    include: [{
      model: Student,
      as: 'student',
    }],
  })
})()

如果我们设置了 as 就需要在 include 选项中设置同样的 as。

按条件查找

代码语言:javascript
复制
(async () => {
  const group = await School.findAll({
    where: {
      name: 'someting',
    },
    include: [{
      model: Student,
      as: 'student',
    }],
  })
})()

文档

更多详细操作请参考官方文档

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sequelize 基本操作
    • 配置 sequelize
      • 创建 model
        • 增删改查
        • 关联表
          • 设置
          • 关联查
        • 文档
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档