请问一下,使用sequelize来操作数据库,但是项目进行到后期肯定会有字段的新增,那么这个时候一般都是怎么操作的呢,是自己手动去数据库新增,然后修改sequelize定义的模型么,还是有其他的方法
ORM一般都有sync操作。在程序运行时调用,把model跟数据表同步。
而sequelize需要你手动定义migration(数据库迁移)。
Up定义迁移(升级),Down定义回滚,回滚一般用不到。
然后写配置文件,先升级本地的数据库表,没问题后,再升级线上的。 文档: http://docs.sequelizejs.com/manual/tutorial/migrations.html
当然我觉得sequelize的migration并不好用。如果新增的字段,需要依赖于其他字段,那就没办法了,自己手写个脚本逐个改吧
同楼上,需要走migration。这是常规流程。
好的,谢谢,我研究研究,就是感觉有点繁琐。
Model.sync({ alter: true });
模型新增字段会自动在数据库中添加
Model.sync({ alter: true })
很有用,在每一个Model返回之前添加sync,启动时候会自动修改适配至对应字段。
@yesvods 好的 谢谢
@xvrzhao 是User.sync({alter: true})
,不是sequelize.sync({alter: true})
,如果是sequelize请用sequelize.sync({force: true})
(慎用)
@xvrzhao O(∩_∩)O哈哈~,修正了
sequelize.sync({force: true}) 把数据删除了,但是没有新增我要的那个字段
你要做字段预留
所以我理解 要想后期增加字段 并且同步到数据库 就这样么 // sync the models to db sequelize .sync({alter: true}) .then(() => console.log(‘Completed!’)) 有没有大佬解惑
https://github.com/zhangmingfeng/easy-migrate 希望可以帮到你
来自酷炫的 CNodeMD
@yuedun 我也加了Model.sync({ alter: true });,但是在添加associations的时候,就一直报错: Unhandled rejection SequelizeDatabaseError: Deadlock found when trying to get lock; try restarting transaction,只有删掉这一行才行。