egg.js sequelize 的經常使用方法總結

Node.js 環境切換

window 下不支持直接切換 node 的環境變量,要經過插件 cross-env 進行切換javascript

// 安裝插件 
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' },
);
相關文章
相關標籤/搜索