我从IRC频道得到的答案:
Sequelize 是一个 ORM,其中包含一些查询构建器的内容; Knex 只是一个查询生成器,而不是一个 ORM。
ORM 实际上不太适合许多用例,很容易遇到它们可以表达的限制,最终需要突破它们。
但这并不能真正解释每种方法的优缺点。 我正在寻找一个解释,可能还有一个简单的例子(用例)来强调这些相似点/差异。
为什么人们会使用其中一种而不是另一种?
Sequelize 是成熟的 ORM,迫使您将 SQL 隐藏在对象表示后面。 Knex 是普通查询生成器,对于应用程序开发来说这是太低级的工具。
更好地使用
objection.js
它结合了ORM的良好部分,而不会影响编写任何类型的SQL查询的能力。
这是 objection.js 作者写的一篇关于它的好文章 https://www.jakso.me/blog/objection-to-orm-hatred
免责声明:我是 knex 维护者,也参与了 objection.js 的开发。
这样想,哪个性能更好,哪个更容易学习。
作为低级数据库驱动程序
对于 postgresql,您可以使用 pg 作为查询构建器
作为中级水平,您可以使用 knex
作为高级,你可以使用 ORM,例如基于 knex 的sequelize、bookshelf、objection
现在低水平并不意味着坏事。这是您可以获得的最佳性能,但缺点是您需要学习正在使用的数据库的查询
现在 knex 与查询生成器相同,具有相同的成本操作
现在等级最高的成本也最高 但是它很容易学习,但是如果你学习了sequelize并决定使用objection,那么规模就会缩小,它们是不同的,所以你需要学习另一个ORM
我的建议是,如果您希望可扩展的复杂后端服务器获得最佳性能,您可以使用查询生成器或 knex
如果你想处理像 mongoose 这样的对象实例,你可以使用 Sequelize。
唯一的区别就是运营成本,差别不大。
但是 ORM 具有更多功能。
当然你可以参考这篇文章来了解更多 关于 ORM
https://blog.logrocket.com/why-you-should-avoid-orms-with-examples-in-node-js-e0baab73fa5/