什么是ORM?简单的讲就是对SQL查询语句的封装,让我们可以用OOP的方式操作数据库,优雅的生成安全、可维护的SQL代码。直观上,是一种Model和SQL的映射关系。 sequelize.query(原始查询) 默认情况下,函数将返回两个参数 - 一个结果数组,以及一个包含元数据(受影响的行等)的对象。 请注意,由于这是一个原始查询,所以元数据(属性名称等)是具体的方言。 某些方言返回元数据 “within” 结果对象(作为数组上的属性)。 但是,将永远返回两个参数,但对于MSSQL和MySQL,它将是对同一对象的两个引用。 const result1 = await mysql.query(‘SELECT id, img_url, url from carousel where status = 1’); //返回值是两个相同元素组成的数组 “result1”: [ [ { “id”: 1, “url”: “/ClassDetail?id=4” }, { “id”: 4, “url”: “/ClassDetail?id=2” } ], [ { “id”: 1, “url”: “/ClassDetail?id=4” }, { “id”: 4, “url”: “/ClassDetail?id=2” } ] ]解决办法有两种传递一个查询类型来告诉后续如何格式化结果 const result= await mysql.query(‘SELECT id, img_url, url from carousel where status = 1’, { replacements: {}, type: mysql.QueryTypes.SELECT });传递模型const Carousel = require(’../../models/Carousel’);const result2 = await mysql.query(‘SELECT id, img_url, url from carousel where status = 1’,{ model: Carousel });替换查询中的替换可以通过两种不同的方式完成:使用命名参数(以:开头),或者由?表示的未命名参数。 替换在options对象中传递。?如果传递一个数组, ? 将按照它们在数组中出现的顺序被替换const banner2 = await mysql.query(‘SELECT id, img_url, url from carousel where id = ?’, { replacements: [1,4,5,6], type: mysql.QueryTypes.SELECT,});// 返回的结果只有数组第一个元素下标对应的数据:const banner3 = await mysql.query(‘SELECT id, img_url, url from carousel where id in (:[1,4,5,6])’, { replacements: {[1,4,5,6]}, type: mysql.QueryTypes.SELECT,});// 返回结果为符合数组的数据// 拓展:模糊查询sequelize.query(‘SELECT * FROM users WHERE name LIKE :search_name ‘, { replacements: { search_name: ‘ben%’ }, type: sequelize.QueryTypes.SELECT }).then(projects => { console.log(projects)})参考文档:Sequelize 中文文档 v4 - Raw queries - 原始查询