关于javascript:eggjs-sequelize-的常用方法总结

11次阅读

共计 3231 个字符,预计需要花费 9 分钟才能阅读完成。

Node.js 环境切换

window 下不反对间接切换 node 的环境变量,要通过插件 cross-env 进行切换

// 装置插件 
npm install cross-env \-g 

// 应用 cross-env 
cross-env NODE\_ENV\=test node app.js

sequelize 变量值

equelize.STRING                       // VARCHAR(255)                  类型:字符串 最大值:65535 个字符
Sequelize.STRING(1234)                // VARCHAR(1234)                 类型:变长 最大值:65535 个字符
Sequelize.TEXT                        // TEXT                          类型:字符串 最大值:65535 个字符
Sequelize.TEXT('tiny')                // TINYTEXT                      类型:字符串 最大值:255 个字符

Sequelize.INTEGER                     // INTEGER                       类型:整型 最大值:范畴 (-2147483648~2147483647)
Sequelize.BIGINT                      // BIGINT                        类型:整型 最大值:范畴 (+-9.22*10 的 18 次方)
Sequelize.BIGINT(11)                  // BIGINT(11)                    类型:整型 最大值:范畴 (+-9.22*10 的 18 次方)

Sequelize.FLOAT                       // FLOAT                         类型:单精度浮点型  8 位精度 (4 字节)
Sequelize.FLOAT(11)                   // FLOAT(11)                     类型:单精度浮点型 8 位精度 (4 字节)
Sequelize.FLOAT(11, 12)               // FLOAT(11,12)                  类型:精度浮点型 8 位精度 (4 字节) m 总个数,d 小数位


Sequelize.DOUBLE                      // DOUBLE                        类型:双精度浮点型 16 位精度 (8 字节) 
Sequelize.DOUBLE(11)                  // DOUBLE(11)                    类型:双精度浮点型 16 位精度 (8 字节) 
Sequelize.DOUBLE(11, 12)              // DOUBLE(11,12)                 类型:双精度浮点型 16 位精度 (8 字节) m 总个数,d 小数位

Sequelize.DECIMAL                     // DECIMAL                       类型:定点数型
Sequelize.DECIMAL(10, 2)              // DECIMAL(10,2)                 类型:定点数型 参数 m <65 是总个数,d<30 且 d<m 是小数位

Sequelize.DATE                        // DATETIME                      类型:日期工夫类型 范例:'2009-05-12 02:31:44'
Sequelize.DATE(6)                     // DATETIME(6)    
Sequelize.DATEONLY                    // DATE without time.
Sequelize.BOOLEAN                     // TINYINT(1)                    类型:整型 范畴 (-128~127)

Sequelize.ENUM('value 1', 'value 2')  // ENUM                          类型:枚举

Sequelize.BLOB                        // BLOB                          类型:二进制数据
Sequelize.BLOB('tiny')                // TINYBLOB                      类型:二进制数据  

sequelize 罕用办法

定义模型

// 定义 model
Sequelize.define('user', {
  // 具体定义
  id: {
    type: Sequelize.INTEGER, // 字段类型
    primaryKey: true, // 是否为主键
    allowNull: false, // 是否容许为空
    unique: true, // 是否惟一
    autoIncrement: true, // 是否为自增
  },
  // 自定义值
  id2: {type: Sequelize.STRING(36), // 字段类型
    primaryKey: true, // 是否为主键
    allowNull: false, // 是否容许为空
    defaultValue: () => { // 自定义默认值
      return uuid.v1();}
  },
  // 繁难定义类型,默认不能为空
  name: Sequelize.STRING(32)
})

定义模型

// 定义 model
Sequelize.define('user', {
  // 具体定义
  id: {
    type: Sequelize.INTEGER, // 字段类型
    primaryKey: true, // 是否为主键
    allowNull: false, // 是否容许为空
    unique: true, // 是否惟一
    autoIncrement: true, // 是否为自增
  },
  // 自定义值
  id2: {type: Sequelize.STRING(36), // 字段类型
    primaryKey: true, // 是否为主键
    allowNull: false, // 是否容许为空
    defaultValue: () => { // 自定义默认值
      return uuid.v1();}
  },
  // 繁难定义类型,默认不能为空
  name: Sequelize.STRING(32)
})

新增数据

// build() 办法须要通过调用 save() 进行保留
let user = User.build({
  name: 'test',
  password: '123456',
});
let rs = await user.save();

// 通过 create() 进行创立
let rs = await User.create({
  name: 'test',
  password: '123456',
});

批改数据

// 留神:更新失败返回值到第 0 个值是 0,更新胜利则是 1
// 第一个参数为更新值
// 第二个参数为更新查问条件
let rs = await User.update({ name: 'test2',},
  {where: { id: 1,},
  },
);

删除数据

let rs = await User.destroy({where: { id: 1,},
})

查问数据

let Op = Sequelize.Op;

// 查问所有
let rs = await User.findAll({
  limit: 10, // 当页条数
  offset: 0, // 开始下标
  order: [['create_time', 'desc']], // 排序规定
  where: { // 查问条件
    type: 'vip', // 指定值
    [Op.or]: { // 应用非凡操作符
      id: [1, 2, 3, 4, 5], // id 蕴含这些数据
      [Op.like]: {name: 'super_'}, // 用户名蕴含 super_
    }
  },
  attributes: [ // 指定返回的属性
    'id',
    ['name', 'userName'] // 第一个参数为属性,第二个参数为别名,返回数据以别名返回
  ],
});

// 查问一条数据
let rs = await User.findOne({where: {id: '123456'},
});

高级查问

// findByPk - 通过主键查问
let res = await User.findByPk(123);

// findOne - 查问满足条件的第一条数据
let res = await User.findOne({
  where: {type: 'user'}
});

// findOrCreate - 查问,如果不存在将创立数据
const [user, created] = await User.findOrCreate({where: { username: 'test'},
  // 如果不存在,将会按 defaults 创立值
  defaults: {job: 'JavaScript'}
});
console.log(user.username); // 'test'
console.log(user.job); // 这里可能为 JavaScript 也可能为其余的
console.log(created); // 是否有创立实例
if (created) {console.log(user.job); // 创立实例,该值必然为 JavaScript
}

// findAndCountAll - 查问并返回总数
// count - 该查问条件下的总条数
// rows - 查问的所有数据
const {count, rows} = await User.findAndCountAll({
  where: {type: 'vip'}
});

批量新增

let re = await User.bulkCreate({ name: 'test_1'},
  {name: 'test_2'},
);
正文完
 0