Rawqueries-Rawqueries本系列文章的应用示例已发布在GitHub上:sequelize-docs-Zh-CN。您可以Fork以帮助改进或Star以关注更新。欢迎星。谢谢通常有一种简单的方法来执行原始/准备好的SQL查询,因此请使用sequelize.query函数。默认情况下,该函数将返回两个参数——一个结果数组和一个包含元数据(受影响的行等)的对象。请注意,由于这是一个原始查询,因此元数据(属性名称等)是特定于方言的。一些方言返回结果对象“内”的元数据(作为数组的一个属性)。然而,总是会返回两个参数,但对于MSSQL和MySQL,它将是对同一对象的两个引用。sequelize.query("UPDATEusersSETy=42WHEREx=12").spread((results,metadata)=>{//结果将是一个空数组,元数据将包含受影响的行数。})inWithout访问元数据,您可以传递一个查询类型来告诉以后如何格式化结果。例如,对于一个简单的选择查询,你可以这样做:sequelize.query("SELECT*FROM`users`",{type:sequelize.QueryTypes.SELECT}).then(users=>{//我们不需要在此处扩展,因为只会将结果返回给选择查询})还有其他几种可用的查询类型。了解有关来源的更多信息第二个选项是模型。如果传递了一个模型,则返回的数据将是该模型的一个实例。//Callee是模型定义。通过这种方式,您可以轻松地将查询映射到预定义模型sequelize.query('SELECT*FROMprojects',{model:Projects}).then(projects=>{//每条记录现在将成为Project的一个实例})查询可以通过两种不同的方式完成:使用命名参数(以:开头),或通过?表示未命名的参数。替换在选项对象中传递。如果传递一个数组,?将按照它们在数组中出现的顺序被替换。如果传递了对象,:key将替换为对象的键。如果对象包含在查询中找不到的键,则抛出异常,反之亦然。sequelize.query('SELECT*FROMprojectsWHEREstatus=?',{replacements:['active'],type:sequelize.QueryTypes.SELECT}).then(projects=>{console.log(projects)})续集。查询('SELECT*FROMprojectsWHEREstatus=:status',{replacements:{status:'active'},type:sequelize.QueryTypes.SELECT}).then(projects=>{console.log(projects)})array替换将自动处理,以下查询将搜索状态与值数组匹配的项目。sequelize.query('SELECT*FROMprojectsWHEREstatusIN(:status)',{replacements:{status:['active','inactive']},type:sequelize.QueryTypes.SELECT}).then(projects=>{console.log(projects)})要使用通配符%,请将其附加到您的替换中。以下查询匹配名称以“ben”开头的用户。sequelize.query('SELECT*FROMusersWHEREnameLIKE:search_name',{replacements:{search_name:'ben%'},type:sequelize.QueryTypes.SELECT}).then(projects=>{console.log(projects)})绑定参数绑定参数就像替换。绑定参数被发送到SQL查询文本之外的数据库,除非替换被转义并在查询发送到数据库之前通过后续插入插入到查询中。查询可以有绑定参数或替换。只有SQLite和PostgreSQL支持绑定参数。其他方言会将它们插入到SQL查询中,如替换。绑定参数由$1、$2、...(数字)或$key(字母数字)引用。这是独立于方言的。如果传递数组,$1将绑定到数组中的第一个元素(bind[0])。如果传递了一个对象,$key就会绑定到object['key']。每个键必须以非数字字符开头。$1不是有效键,即使对象['1']存在。在这两种情况下,$$都可用于转义$字符符号。数组或对象必须包含所有绑定值,否则Sequelize将抛出异常。这甚至适用于数据库可能忽略绑定参数的情况。数据库可能会添加更多限制。绑定参数不能是SQL关键字,也不能是表名或列名。引用的文本或数据也会忽略它们。在PostgreSQL中,如果无法从上下文$1::varchar中推断出类型,则可能还需要对其进行强制转换。sequelize.query('SELECT*,"textwithliteral$$1andliteral$$status"astFROMprojectsWHEREstatus=$1',{bind:['active'],type:sequelize.QueryTypes.SELECT}).然后(projects=>{console.log(projects)})sequelize.query('SELECT*,"textwithliteral$$1andliteral$$status"astFROMprojectsWHEREstatus=$status',{bind:{status:'active'},type:sequelize.QueryTypes.SELECT}).then(projects=>{console.log(projects)})如果本文对你有帮助,请点赞或starGitHub:sequelize-docs-zh-CN支持,谢谢。
