nodejs数据持久化--MySQL(2)Sequelize对象关系映射

引入依赖

const Sequelize = require('sequelize')

建立数据库连接

// 建立连接
const sequelize = new Sequelize('数据库名称', '用户名', '密码', {
  host: 'localhost',
  /* 数据库类型 'mysql' | 'mariadb' | 'postgres' | 'mssql' */
  dialect: 'mysql'
})
const connection = await sequelize.authenticate()
console.log('连接成功')
连接成功

定义模型

// 定义模型
const Fruit = sequelize.define('Fruit', {
 // 定义主键为UUID,(如果没有定义,默认是id自增)
  id: {
    // 设置id为UUID类型
    type: Sequelize.DataTypes.UUID,
    defaultValue: Sequelize.DataTypes.UUIDV1,
    primaryKey: true
  },
  name: {
    type: Sequelize.STRING(20),
    allowNull: false
  },
  price: {
    type: Sequelize.FLOAT,
    allowNull: false
  },
  stock: {
    type: Sequelize.INTEGER,
    defaultValue: 0
  }
}, {
  // 是否创建'createdAt'和'updatedAt'字段(默认为true)
  timestamps: false,
  // 默认false修改表名为复数,true不修改表名,与数据库表名同步
  freezeTableName: true,
  // 数据库表名
  tableName: 'TBL_FRUIT'
})

在这里插入图片描述

同步数据库

// 同步数据库
let ret = await Fruit.sync()
// 强制同步:创建表之前先删除已存在的表
// ret = await Fruit.sync({ force: true })
console.log(ret)
Fruit

插入数据

// 插入数据
ret = await Fruit.create({
  name: 'strawberry',
  price: 88,
  stock: 22
})
console.log('create: ', JSON.stringify(ret, '', '\t'))
create:  {
  "stock": 0,
  "id": 4,
  "name": "strawberry",
  "price": 88,
  "updatedAt": "2019-12-27T09:09:13.544Z",
  "createdAt": "2019-12-27T09:09:13.544Z"
}

更新数据

// 更新数据
ret = await Fruit.update({
  price: 5.2
}, {
    where: {
    name: 'banana'
  }
})
console.log('update: ', ret)
update:  [ 1 ]

查询数据
findAll参数可以为空

// 条件查询
const Op = Sequelize.Op
ret = await Fruit.findAll({
  where: {
    // 价格小于100, 大于30 
    price: { [Op.lt]: 100, [Op.gt]: 30 }
  }
})
console.log('find: ', JSON.stringify(ret, '', '\t'))
find:  [
   {
	"id": 2,
	  "name": "apple",
	  "price": 50.1,
	  "stock": 0,
	  "createdAt": "2019-12-27T08:49:39.000Z",
	  "updatedAt": "2019-12-27T08:49:39.000Z"
   }
]

完整代码

(async () => {
  const Sequelize = require('sequelize')

  // 建立连接
  const sequelize = new Sequelize('数据库名称', '用户名', '密码', {
    host: 'localhost',
    /* 数据库类型 'mysql' | 'mariadb' | 'postgres' | 'mssql' */
    dialect: 'mysql'
  })
  const connection = await sequelize.authenticate()
  console.log('连接成功')

  // 定义模型 fruits
  const Fruit = sequelize.define('Fruit', {
  	// 定义主键为UUID,(如果没有定义,默认是id自增)
    id: {
      // 设置id为UUID类型
      type: Sequelize.DataTypes.UUID,
      defaultValue: Sequelize.DataTypes.UUIDV1,
      primaryKey: true
    },
    name: {
      type: Sequelize.STRING(20),
      allowNull: false
    },
    price: {
      type: Sequelize.FLOAT,
      allowNull: false
    },
    stock: {
      type: Sequelize.INTEGER,
      defaultValue: 0
    }
  }, {
    // 是否创建'createdAt'和'updatedAt'字段(默认为true)
    timestamps: false,
    // 默认false修改表名为复数,true不修改表名,与数据库表名同步
    freezeTableName: true,
    // 数据库表名
    tableName: 'TBL_FRUIT'
  })

  // 同步数据库
  ret = await Fruit.sync()
  // 强制同步:创建表之前先删除已存在的表
  // ret = await Fruit.sync({ force: true })
  console.log(ret)

  // 插入数据
  ret = await Fruit.create({
    name: 'strawberry',
    price: 88,
    stock: 22
  })
  console.log('create: ', JSON.stringify(ret, '', '\t'))

  // 更新数据
  ret = await Fruit.update({
    price: 5.2
  }, {
      where: {
      name: 'banana'
    }
  })
  console.log('update: ', ret)

  // 查询数据
  const Op = Sequelize.Op
  ret = await Fruit.findAll({
    where: {
      price: { [Op.lt]: 100, [Op.gt]: 30 }
    }
  })
  console.log('find: ', JSON.stringify(ret, '', '\t'))
})()

sequelize文档 https://sequelize.org/master/manual/getting-started.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你的第一个问题是关于 node.js 和 MySQL 插入语句的语法错误提示,是吗? 首先,你需要确保你的 MySQL 语句的语法是正确的。MySQL 插入语句的基本语法如下: ``` INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); ``` 其中,`table_name` 是你要插入数据的表的名称,`column1, column2, column3` 是你要插入的列的名称,`value1, value2, value3` 是你要插入的值。 在 node.js 中,你可以使用 `mysql` 模块来连接和操作 MySQL 数据库。下面是一个示例代码,演示如何使用 `mysql` 模块来插入数据MySQL 数据库中: ```javascript const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'mydatabase' }); connection.connect((err) => { if (err) throw err; console.log('Connected!'); const sql = "INSERT INTO customers (name, address) VALUES ('John Doe', 'Highway 71')"; connection.query(sql, (err, result) => { if (err) throw err; console.log('1 record inserted'); connection.end(); }); }); ``` 在上面的代码中,我们创建了一个 `mysql` 连接对象 `connection`,并在连接成功后,使用 `connection.query()` 方法来执行 MySQL 插入语句。 如果你使用类似上面的代码来执行 MySQL 插入语句,但是仍然遇到语法错误提示,那么你需要检查你的 MySQL 语句是否正确。你可以尝试在 MySQL 命令行中执行你的 MySQL 语句,以确保它没有语法错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值