使用 TypeScript 时,Sequelize 在 findAndCountAll() 中生成错误的 SQL 语句
Sequelize generates wrong SQL statements in findAndCountAll() when using TypeScript
我将以下代码用于使用 expressjs 的 REST 路由,我也在我的项目中使用 TS。
const { limit, skip } = req.query as any;
let data: {
count: number;
rows: Array<Eintragung>;
};
try {
data = await Eintragung.findAndCountAll({
limit: limit as number,
order: [['Id', 'DESC']],
});
} catch (error) {
console.error(error);
return res.status(500).json({ error });
}
代码的问题是 sequelize 生成了一个 SQL 语句,其限制看起来像这样 LIMIT '25'
,但在 MySQL/MariaDB 中这不是一个有效的语句,因为 25 应该是数字不是字符串。
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''25'' at line 1
我使用findAll()
时出现同样的问题。
如果我像这样将限制硬编码为 25
data = await Eintragung.findAndCountAll({
limit: 25,
order: [['Id', 'DESC']],
});
正确生成 SQL 语句并且查询有效。
我想知道我在 TypeScript 上做错了什么,我显然必须将 limit
变量声明为数字,因为 sequelize 只接受数字作为限制。
我正在使用 sequelize 6.3.5 和 MariaDB 10.3.27
通过将 limit 变量包装在 parseInt()
中来修复它,如下所示:
data = await Eintragung.findAndCountAll({
limit: parseInt(limit),
order: [['Id', 'DESC']],
});
我将以下代码用于使用 expressjs 的 REST 路由,我也在我的项目中使用 TS。
const { limit, skip } = req.query as any;
let data: {
count: number;
rows: Array<Eintragung>;
};
try {
data = await Eintragung.findAndCountAll({
limit: limit as number,
order: [['Id', 'DESC']],
});
} catch (error) {
console.error(error);
return res.status(500).json({ error });
}
代码的问题是 sequelize 生成了一个 SQL 语句,其限制看起来像这样 LIMIT '25'
,但在 MySQL/MariaDB 中这不是一个有效的语句,因为 25 应该是数字不是字符串。
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''25'' at line 1
我使用findAll()
时出现同样的问题。
如果我像这样将限制硬编码为 25
data = await Eintragung.findAndCountAll({
limit: 25,
order: [['Id', 'DESC']],
});
正确生成 SQL 语句并且查询有效。
我想知道我在 TypeScript 上做错了什么,我显然必须将 limit
变量声明为数字,因为 sequelize 只接受数字作为限制。
我正在使用 sequelize 6.3.5 和 MariaDB 10.3.27
通过将 limit 变量包装在 parseInt()
中来修复它,如下所示:
data = await Eintragung.findAndCountAll({
limit: parseInt(limit),
order: [['Id', 'DESC']],
});