使用原始Sequelize查询时如何使用替换:避免使用单引号?

6 浏览
0 Comments

使用原始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谢谢。

0
0 Comments

问题的原因是无论如何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查询替换时单引号问题的困扰。

0
0 Comments

问题的原因:

问题是由于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});

0