Koa + Sequelize 操作 MySQL 数据库

查看更多资源

1. 本地启动mysql,新建test数据库、user表:

2. 新建项目 sequelize-demo:

3. 安装:

npm install sequelize mysql2 --save

4. app.js 代码:

(async function () {
  const Sequelize = require('sequelize'); // 1、引入模块

  const sequelize = new Sequelize('test', 'root', '123456', { // 2、连接数据库
    host: '127.0.0.1',
    port: '3306',
    dialect: 'mysql',
    timezone: 'Asia/Shanghai', // 设置 时区
  });

  sequelize.authenticate().then(() => { // 3、 测试方式一:连接数据库是否成功
    console.log('link success');
  }).catch(err => {
    console.log('link err')
  })

  // 测试方式二:连接数据库是否成功
  //   try {
  //     sequelize.authenticate();
  //     console.log('连接成功');
  // } catch(e) {
  //     console.log('连接失败');
  // };

  // 4、 创建数据表模型 user -> 定义数据结构 及 表信息
  const UserModel = sequelize.define('User', {
    id: {
      type: Sequelize.INTEGER(10), // 数据类型
      allowNull: false, // 是否为 null
      primaryKey: true, // 是否为 主键
      autoIncrement: true // 是否 自动填值
    },
    username: {
      type: Sequelize.STRING(255),
      allowNull: false,
      defaultValue: '' // 默认值
    },
    age: {
      type: Sequelize.TINYINT,
      allowNull: false,
      defaultValue: 0
    },
    gender: {
      type: Sequelize.ENUM(['男', '女']),
      allowNull: false,
      defaultValue: '男'
    }
  }, { // 定义 表信息
      timestamps: false, // 是否 自动添加数据的 创建、更新 时间戳
      paranoid: false, // 是否 硬删除数据
      freezeTableName: true, // 是否 冻结表名,false 访问 users表
      tableName: 'user', // 访问数据库 user 表
      indexes: [ // 设置 索引
        {
          name: 'uname',
          fields: ['username']
        },
        {
          name: 'age',
          fields: ['age']
        }
      ]

    });

  /**
   * 1. 新建数据
   */

  let Kimoo = UserModel.build({  // 新建一条user数据
    username: 'Kimoo',
    age: 30,
    gender: '男'
  })
  await Kimoo.save(); // 必须 保存 -> 同步到数据库

  /**
   * 2. 数据 -> 查询、修改、更新、删除
   */

  // let u1 = await UserModel.findByPK(1);
  // console.log(u1)

  // let u2 = await UserModel.findById(2);
  // console.log(u2)

  // u2.set('age', 31); // 修改
  // await u2.save();

  // await u2.update({ // 更新 update == set + save
  //     age: 32
  // });

  // u2.destroy(); // 删除

  /**
   * 3. fineOne -> 条件查询 
   */

  let rs1 = await UserModel.findOne({
    where: {
      username: '李四'
    }
  });
  console.log(rs1.dataValues)

  /**
   * 4. findAll -> 查询 
   */

  let rs2 = await UserModel.findAll();
  // console.log(rs2)
  rs2.forEach(element => {
    console.log(element.dataValues)
  });

  /**
   * 5. 条件查询: age >= 30 
   */

  let rs3 = await UserModel.findAll({
    where: {
      age: {
        [Sequelize.Op.gte]: 30
      }
    }
  })
  rs3.forEach(element => {
    console.log(element.dataValues)
  });

  /**
   * 6. 条件查询: age >= 30 或者 gender = '女'
   */

  let rs4 = await UserModel.findAll({
    where: {
      [Sequelize.Op.or]: [
        {
          age: {
            [Sequelize.Op.lte]: 30
          }
        }, {
          gender: '女'
        }
      ]
    }
  })
  rs4.forEach(element => {
    console.log(element.dataValues)
  });

  /**
   * 7. 限制查询 -> limit、offset
   */

  let rs5 = await UserModel.findAll({
    limit: 2
  })
  rs5.forEach(element => {
    console.log(element.dataValues)
  });

  let rs6 = await UserModel.findAll({
    offset: 2,
    limit: 3
  })
  console.log(rs6.map(r => r.get('username')));

  /**
   * 8. 排序查询 -> order
   */

  let rs7 = await UserModel.findAll({
    order: [
      ['age', 'desc']
    ]
  })
  rs7.forEach(element => {
    console.log(element.dataValues)
  });

  /**
   * 8. 函数查询 -> count、sum
   */

  let rs8 = await UserModel.count()
  console.log(rs8)

  let rs9 = await UserModel.findAndCountAll({
    limit: 3
  })
  console.log(rs9);

  let rs10 = await UserModel.sum('age', {
    where: {
      gender: '男'
    }
  })
  console.log(rs10)

})()

// 启动:node app

5. 文档:

1. 英文 文档
https://sequelize.org/

2. 中文 文档
https://github.com/demopark/sequelize-docs-Zh-CN

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值