Sequelize 入门

三月份事情比较多,学得乱七八糟,差点被新单位入Java坑

前端不香吗? node.js不香吗

后台数据库还是入mysql的坑吧

Sequelize

Sequelize.js 提供对 MySQL,MariaDB,SQLite 和 PostgreSQL 数据库的简单访问,通过映射数据库条目到对象,或者对象到数据库条目。简而言之,就是 ORM(Object-Relational-Mapper)。Sequelize.js 完全是使用 JavaScript 编写,适用于 Node.js 的环境。

sequlize 中文官方文档:链接地址

本文已操作mysql为例

安装
npm install --save sequelize
npm install --save mysql2 // 安装驱动
建立连接

db.js

const Sequelize = require('sequelize')

const sequelize = new Sequelize(dbName, user, password, {
  dialect: 'mysql',
  host:"",
  port:"",
  logging: false,  // 是否在控制台打印出原生sql语句
  timezone: '+08:00', // 时区
  pool: {  // 池
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000,
  },
  define: {
    // create_time && update_time
    timestamps: true, // 是否时间戳
    createdAt: 'created_at',
    updatedAt: 'updated_at',
    deletedAt: 'deleted_at',
    // 把驼峰命名转换为下划线
    underscored: true,
    scopes: {} // 作用域规则 可以包括与常规查找器 where, include, limit 等所有相同的属性
  }
})
// 创建模型
sequelize.sync({force: false}) // 是否删除再重新创建
module.exports = {
  sequelize
}
创建Model
const moment = require('moment'); // 格式化时间库

const {sequelize} = require('./db'); // 即是上文连接数据库后返回的模型实例
const {Sequelize, Model} = require('sequelize')

// 定义文章分裂模型
class CategoryModel extends Model {
	// 可在此写一些实例方法或者静态方法
}

// 初始分类模型
CategoryModel.init({
  id: {
    type: Sequelize.INTEGER, // 类型
    primaryKey: true, // 主键
    autoIncrement: true  // 自增长
  },
  name: {
    type: Sequelize.STRING,
    allowNull: false, // 允许为空
    comment: '分类名称'
  },
  keyword: {
    type: Sequelize.STRING,
    allowNull: false,
    comment: '分类关键字'
  },
  parent_id: {
    type: Sequelize.INTEGER,
    allowNull: true,
    defaultValue: 0,
    comment: '分类父级ID,默认为0'
  },
  created_at: {
    type: Sequelize.DATE,
    allowNull: false,
    get() {
      return moment(this.getDataValue('created_at')).format('YYYY-MM-DD');
    }
  }
}, {
  sequelize,
  modelName: 'category',
  tableName: 'category'
})

module.exports = {
  Category
}
增删改查

// 增
(async () => {
  const now = Date.now()
  const user = await CategoryModel.create({
    name: '',
    parent_id: 'root',
    keyword: '',
  })
  console.log('创建:' + JSON.stringify(user))
})();


//查
(async () => {
  // 查找所有
  const allCate = await CategoryModel.findAll()

  // 按id查找
  const oneCate = await CategoryModel.findByPk(id)

  // 按条件查询
  const someCate = await CategoryModel.findAll({
    where: {
      // 模糊查询
      name: {
        $like: '小%',
      },
      // 精确查询
      keyword: 'xxx',
    }
  })

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

// 改
(async () => {
// 方法一
await CategoryModel.upsert(data)  // data 里面如果带有 id 则更新,不带则新建

// 方法二
const cate= await CategoryModel.findByPk(id)
cate.update(data)
})()


// 删
(async () => {
// 方法一
// 删除所有名字带’小‘的用户
await CategoryModel.destroy({
  where: {
    name: 'xx',
  },
})

// 方法二
const user = await UserModel.findByPk(id)
user.destroy()
})()
op
const { Op }= Sequelize

[Op.and]: {a: 5}           // 且 (a = 5)
[Op.or]: [{a: 5}, {a: 6}]  // (a = 5 或 a = 6)
[Op.gt]: 6,                // id > 6
[Op.gte]: 6,               // id >= 6
[Op.lt]: 10,               // id < 10
[Op.lte]: 10,              // id <= 10
[Op.ne]: 20,               // id != 20
[Op.eq]: 3,                // = 3
[Op.not]: true,            // 不是 TRUE
[Op.between]: [6, 10],     // 在 6 和 10 之间
[Op.notBetween]: [11, 15], // 不在 11 和 15 之间
[Op.in]: [1, 2],           // 在 [1, 2] 之中
[Op.notIn]: [1, 2],        // 不在 [1, 2] 之中
[Op.like]: '%hat',         // 包含 '%hat'
[Op.notLike]: '%hat'       // 不包含 '%hat'
[Op.iLike]: '%hat'         // 包含 '%hat' (不区分大小写)  (仅限 PG)
[Op.notILike]: '%hat'      // 不包含 '%hat'  (仅限 PG)
[Op.regexp]: '^[h|a|t]'    // 匹配正则表达式/~ '^[h|a|t]' (仅限 MySQL/PG)
[Op.notRegexp]: '^[h|a|t]' // 不匹配正则表达式/!~ '^[h|a|t]' (仅限 MySQL/PG)
[Op.iRegexp]: '^[h|a|t]'    // ~* '^[h|a|t]' (仅限 PG)
[Op.notIRegexp]: '^[h|a|t]' // !~* '^[h|a|t]' (仅限 PG)
[Op.like]: { [Op.any]: ['cat', 'hat']} // 包含任何数组['cat', 'hat'] - 同样适用于 iLike 和 notLike
[Op.overlap]: [1, 2]       // && [1, 2] (PG数组重叠运算符)
[Op.contains]: [1, 2]      // @> [1, 2] (PG数组包含运算符)
[Op.contained]: [1, 2]     // <@ [1, 2] (PG数组包含于运算符)
[Op.any]: [2,3]            // 任何数组[2, 3]::INTEGER (仅限PG)
[Op.col]: 'user.organization_id' // = 'user'.'organization_id', 使用数据库语言特定的列标识符, 本例使用 PG
常用内置变量
$and: {a: 5}           // AND (a = 5)
$or: [{a: 5}, {a: 6}]  // (a = 5 OR a = 6)
$gt: 6,                // > 6
$gte: 6,               // >= 6
$lt: 10,               // < 10
$lte: 10,              // <= 10
$ne: 20,               // != 20
$not: true,            // IS NOT TRUE
$between: [6, 10],     // BETWEEN 6 AND 10
$notBetween: [11, 15], // NOT BETWEEN 11 AND 15
$in: [1, 2],           // IN [1, 2]
$notIn: [1, 2],        // NOT IN [1, 2]
$like: '%hat',         // LIKE '%hat'
$notLike: '%hat'       // NOT LIKE '%hat'
$iLike: '%hat'         // ILIKE '%hat' (case insensitive) (PG only)
$notILike: '%hat'      // NOT ILIKE '%hat'  (PG only)
$like: { $any: ['cat', 'hat']}
                       // LIKE ANY ARRAY['cat', 'hat'] - also works for iLike and notLike
$overlap: [1, 2]       // && [1, 2] (PG array overlap operator)
$contains: [1, 2]      // @> [1, 2] (PG array contains operator)
$contained: [1, 2]     // <@ [1, 2] (PG array contained by operator)
$any: [2,3]            // ANY ARRAY[2, 3]::INTEGER (PG only)

$col: 'user.organization_id' // = "user"."organization_id", with dialect specific column identifiers, PG in this example
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值