Knex.js 是一个SQL语句构建器,
在已知 SQL 的情况下,可以使用 chatGPT,来反向生成 Knex.js 代码。
假设有如下的场景:
通过监控,日志等系统获取到SQL,
然后使用 chatGPT 生成对应的 Knex.js 代码,
如果这个SQL是本身用 Knex.js 生成的,
那么就可以对比审计原来的代码,
如果需要使用 Knex.js 重写此业务,
无需阅读 Knex.js 文档或者手动编码,
直接使用生成的代码即可。
使用举例:
示例 SQL
SELECT e.name
FROM employees e
JOIN departments d ON e.department_id = d.id
JOIN (
SELECT department_id, AVG(salary) AS avg_salary
FROM salaries
GROUP BY department_id
) AS avg_salaries ON d.id = avg_salaries.department_id
JOIN salaries s ON e.id = s.employee_id
WHERE d.name = 'Engineering' AND s.salary > avg_salaries.avg_salary;
使用 Knex.js 编写上述 SQL 查询的生成代码如下:
const knex = require('knex')({
client: 'your_database_client',
connection: {
// your database connection configuration
}
});
knex.select('e.name')
.from('employees as e')
.join('departments as d', 'e.department_id', 'd.id')
.join(knex.select('department_id', knex.raw('AVG(salary) as avg_salary')).from('salaries').groupBy('department_id').as('avg_salaries'), 'd.id', 'avg_salaries.department_id')
.join('salaries as s', 'e.id', 's.employee_id')
.where('d.name', 'Engineering')
.andWhere('s.salary', '>', knex.raw('avg_salaries.avg_salary'))
.then(rows => {
console.log(rows);
})
.catch(err => {
console.error(err);
})
.finally(() => {
knex.destroy();
});
记得替换 your_database_client
和连接配置与您的实际数据库信息相匹配。
参考 Reference: