Node.js 没有很好的 ORM 来管理 MySQL 模式/迁移......所以我可以使用 SQLAlchemy 来管理它吗?
Posted
技术标签:
【中文标题】Node.js 没有很好的 ORM 来管理 MySQL 模式/迁移......所以我可以使用 SQLAlchemy 来管理它吗?【英文标题】:Node.js doesn't have a good ORM for managing MySQL schema/migrations...so can I use SQLAlchemy to manage it? 【发布时间】:2012-01-04 07:07:33 【问题描述】:我需要使用 Node.js,但它没有适用于 mysql 的良好 ORM。所以我打算使用 SQLAlchemy 来定义我的模式。然后使用 node-mysql 进行低级查询(当然,我不能使用 SQLAlchemy 的查询语言,因为它是在 python 中的。)
你们觉得呢?
sequelize 似乎是最好的……但似乎没有多少人在使用它。另外,迁移呢?我该如何处理?
node-orm 似乎也不是很活跃。
对此有什么想法?
【问题讨论】:
这里总结得很好:quora.com/Database-Migrations/… bitbucket.org/zzzeek/alembic 将是要使用的库。由 SQLAlchemy 的作者编写。 【参考方案1】:Sequelize 对于 MySQL 来说是相当不错的 ORM,并且具有出色的文档。您可以使用 node-migrate 进行迁移。
【讨论】:
这个答案已经过时了。 Sequelize 现在具有迁移功能。但是对于架构迁移撤消它会被破坏并且非常有限。 我只是希望 Sequelize 不那么神奇。我想要漂亮的纯 javascript 对象。你甚至不能在 Sequelize 创建的“类”上使用prototype
。你必须使用它的神奇'instanceMethods'废话。 JS 功能足够强大,您不必这样做。
不幸的是,sequelize 迁移是个笑话。如果你有一个简单的表并从命令行定义它,它会神奇地为它创建一个迁移,耶!但对于现实世界中的任何事物,它都是不可用的:关系?不,不支持。指数?不,不能有。从现有模型生成迁移?不行,做不到。因此,您最终将所有内容都编写了两次:一次在模型中,一次用于迁移(但语法不同)。如果你搞砸了,你就完蛋了。
@d11wtq 您可能想研究 v4,因为现在使用原型可以正常工作。您可以使用MyUser.findByEmail = function ()
定义类方法或使用MyUser.prototype.sendBirthdayWishes = function ()
定义实例方法。【参考方案2】:
我们在 Node 项目中使用 Sequelize.js,我想它可以完成工作,但有一些问题。一个例子是 MySQL Sequelize 查询引擎对你提供给它的 SQL 字符串进行区分大小写的字符串匹配 (this.sql.indexOf('SELECT') == 0)。这意味着如果您的 SQL 恰好是小写,它可能会失败。 SQL 关键字are usually case insensitive(尽管按照惯例是大写的)所以 Sequelize 的实现看起来像是一个 hack。
从 1.3.0 版开始,Sequelize 支持迁移,但我没有使用它,我正在考虑使用自己的迁移。
我来自使用过 Ruby ActiveRecord ORM 的背景,鉴于此以及上面提到的问题,我不愿推荐 Sequelize。不幸的是,我不知道有什么更好的选择。
UPDATE1:"Which ORM should I use for Node.js and MySQL?" 下还有其他 ORM 建议。
UPDATE2:我已经发布了我的 Sequelize.js 迁移代码on Github
【讨论】:
【参考方案3】:你可以使用light-orm和mysql:
-
https://npmjs.org/package/light-orm - ORM 包装器
https://npmjs.org/package/mysql - 司机
Bookshelf.js 也不错,但在某些方面不够灵活。例如,您不能执行 SQL 请求并将结果转换为模型。所以,使用 light-orm。
【讨论】:
以上是关于Node.js 没有很好的 ORM 来管理 MySQL 模式/迁移......所以我可以使用 SQLAlchemy 来管理它吗?的主要内容,如果未能解决你的问题,请参考以下文章
你如何在 Node.js 中模拟 MySQL(没有 ORM)?