mysql - 节点、Sequelize、同步模型、混合力:真/假
问题描述
我很困惑(再次)。
在使用 Sequelize 定义数据库(MySQL)表时,我想做一个同步(强制:真),以删除/创建表。到现在为止还挺好。
现在我对我的表感到满意user
,并且不想在每次运行时都放弃它,同时我继续定义其他表。
所以,我想在user
选项上设置一个标志,sync: {forced: false}
module.exports = (sequelize, DataTypes) => {
let Schema = sequelize.define(
"user",
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
BlaBla:{}
},
{ // options
sync: {force: false},
freezeTableName: true,
timestamps: true
});
return Schema;
};
这不起作用。每次运行时都会删除/创建表。
继续定义我的company
表。
module.exports = (sequelize, DataTypes) => {
let Schema = sequelize.define(
"company",
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
BlaBla:{}
},
{ // options
sync: {force: true},
freezeTableName: true,
timestamps: false
});
return Schema;
};
问题
- 如何根据每个
sequelize.define
选项有选择地同步表?
解决方案
sequelize.define()
不支持有选择地同步。有关详细信息,请参阅模型定义配置。在您的项目的其他地方,您必须调用sequelize.sync({force: true})
同步所有模型。您应该首先纠正它,因为它会批量强制所有模型同步。
修复该问题后,您有几个选择:
1:继续使用迁移。对架构的每次添加或更改都会在迁移中捕获,因此您可以推出每个更改而无需重新同步其他更改。请参阅http://docs.sequelizejs.com/manual/migrations.html
2:按照您的建议单独同步每个表。您需要sync()
分别为每个模型调用该方法,例如:
const user = require('./user');
const company = require('./company');
company.sync();
compant.sync({force:true});
这对于早期开发可能是实用的,但是随着您在项目中取得进展并开始发布,迁移应该是您推出模式更改的首选方法。
请参阅http://docs.sequelizejs.com/manual/models-definition.html#database-synchronization
推荐阅读
- python - 在 PyCharm 中打印时删除 49 个字符的限制
- reactjs - React中如何控制渲染组件的顺序?
- sql - 如何计算 BigQuery 中数组列的所有值的平均值和中位数?
- docker - elasticsearch可以同时支持http和https访问吗?
- perforce - 在 perforce 中防止更改某些文件的最佳实践
- java - 无法将 http 重定向到 https
- python - 如何在 Forloop 中的 Python 中将字符串附加到字典
- r - 重塑凌乱的数据框,将行扩展到列名
- java - PathVariable 在 swagger SpringFox(3.0.0) 中作为可选
- ios - 在 Mac App Store 上下载应用程序时出现“找不到具有指定主机名的服务器”错误