node.js - sequelize 是否在数据库中创建约束?
问题描述
首先,我曾经使用 Django 作为 ORM 框架,django 为我处理一切......创建约束、表等......但是当我看到 sequelize 是一个 ORM 框架时,我决定改变一个使用 Express 的项目。
到目前为止,我正在使用迁移,但我可以看出这与 django 方式不同,我可以使用 cli 生成模型和第一次迁移,但我想创建带有约束等的整个表,有一种方法要做到这一点?还是“拥有”和“属于”功能仅从后端角度验证数据,而不是真正在后端创建约束?
另一件事是我真的必须使用迁移两次完成所有工作吗?我的意思是配置我的模型,然后配置迁移中的所有字段?
最后一件事,有没有办法清除数据库并重新运行迁移?没有迁移我可以使用 sync({force:true}) 但这不适用于迁移。
'use strict'
const {
Model
} = require('sequelize')
module.exports = (sequelize, DataTypes) => {
class Foo extends Model {
static associate (models) {
models.Foo.belongsTo(models.Bar, { foreignKey: 'foo_id' });
}
};
Foo.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING(100),
allowNull: false,
unique: true,
},
}, {
sequelize,
modelName: 'foo'
})
return Foo
}
const {
Model
} = require('sequelize')
module.exports = (sequelize, DataTypes) => {
class Bar extends Model {
static associate (models) { }
};
Bar.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: DataTypes.STRING(100),
allowNull: false,
unique: true,
},
}, {
sequelize,
modelName: 'bar'
})
return Bar
}
迁移就像
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('foo', {
id: {
type: Sequelize.DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.DataTypes.STRING,
allowNull: false,
unique: true,
},
})
},
// How can i create my constraints here?
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('foo')
}
};
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('bar', {
id: {
type: Sequelize.DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.DataTypes.STRING,
allowNull: false,
unique: true,
},
foo_id: {
type: Sequelize.DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
})
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('bar')
}
};
解决方案
推荐阅读
- azure - 如何将 Application Insights 从一个区域迁移到另一个区域?
- c# - C# 无论如何要从 IQueryable 聚合(不是 AsEnumerable)
- python - 熊猫合并数据框从末尾移动新列
- python - 单个值的按位异或校验和?
- excel - 如何检查范围并将包含值的单元格复制到另一个单元格
- python - Selenium WebDriver - 无法找到元素?
- django - 如何从 Django 中的关系数据库中检索数据
- pandas - X 轴上的日期(Matplotlib 绘图)
- java - 如何在 Java 的另一个文件中使用自定义类?
- python-3.x - 在 python 3 中 for 循环结束后,光标应保持在同一行