使用原始Sequelize查询时如何使用替换:避免使用单引号?
使用原始Sequelize查询时如何使用替换:避免使用单引号?
这可能有一个非常简单的答案,但我没有看到它。\n我想使用Sequelize做一个原始查询:\n
var sequelize = require('sequelize'); sequelize .query("LOAD DATA LOCAL INFILE :file INTO TABLE :table FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';", null, {raw:true}, {file: datasetPath, table: "dataset_" + datasetName})
\n问题是替换字符串同时包含了:file
替换(这是好的,因为它是一个路径)和:table
替换(这是不好的,因为它只是一个没有修饰的表名,并且破坏了查询)。如何避免在表名替换的情况下出现这些引号?\n谢谢。
问题的原因是无论如何sequelize query的替换值都会被单引号包裹,即使这些值不是字符串。例如,在insert语句中使用简单的整数值。这导致了问题的出现。
解决方法是使用Sequelize提供的特殊语法来避免单引号的问题。下面是解决方法的示例代码:
const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'mysql' }); const query = `INSERT INTO users (id, name, age) VALUES (:id, :name, :age)`; sequelize.query(query, { replacements: { id: 1, name: 'John', age: Sequelize.literal('age + 1') }, type: sequelize.QueryTypes.INSERT });
在上面的代码中,我们使用了Sequelize的`literal`方法来避免单引号的问题。`literal`方法告诉Sequelize将替换值作为原始的SQL表达式,而不是字符串。这样就可以正确地插入整数值,而不需要单引号。
希望以上内容能帮助你解决使用Sequelize查询替换时单引号问题的困扰。
问题的原因:
问题是由于Sequelize会将字符串进行转义,导致无法直接使用变量作为表名插入到查询中。
解决方法:
一种解决方法是使用Sequelize.literal()
方法来构建原始查询,这样可以避免Sequelize对字符串进行转义。具体代码如下:
sequelize.query(Sequelize.literal(`LOAD DATA LOCAL INFILE :file INTO TABLE dataset_${datasetName} FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';`), null, {file: datasetPath});