Sequelize | 1. 模型 - 创建表
2021-01-06 本文已影响0人
ShadowFieldEric
创建模型有两种方法
UserModel.sync()方法用于与数据库同步(即创建表或更新表)
- 方法一:使用
sequelize.define(表名、属性、附加参数)方法
const UserModel = sequelize.define('t_users', {
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING,
allowNull: true // default: true
}
}, {
freezeTableName: true // table name auto freeze
});
(async ()=> {
await UserModel.sync({force: true}) // force:true => delete it if exists
})()
- 方法二:继承
Model基类并使用UserModel.init(属性、附加参数)方法
class UserModel extends Model { }
UserModel.init({
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING,
allowNull: true
}
}, {
sequelize,
modelName: 't_users',
freezeTableName: true
});
(async () => {
await UserModel.sync({ force: true }) // force:true => delete it if exists
})()
Tips
- 用以上两种方法创建表时会自带id、createAt、updateAt字段。可在附加参数中使用
timestamps:false禁用。也可用createAt:false或createAt:'createTimestamp'来设置禁用某字段及修改字段名。 -
UserModel.sync()方法,不带参数表示如果表不存在,才创建表。带{ force: true }参数则表示,原表存在需要删除原表。带{ force: false }参数则表示更新表的字段内容以匹配当前表。 - 初始化模型时,附加参数中的
freezeTableName: true,表示是否需要自动复数表名,true表示不需要,会按照表名参数创建表。默认为false,自动复数表名。 - 如果
modelName参数(方法一中第一个参数,方法二中第二个参数的modelName字段)未传入,则会自动使用模型名作为表名,按以上代码将会创建出UserModel表。 -
sequelize.sync()方法,可同步所有的表创建或更新的内容。