Sequelize之Model模型定义

lizuncong (lizuncong) · GitHubI am a strong believer in reverse engineering. lizuncong has 42 repositories available. Follow their code on GitHub.https://github.com/lizuncong

概念

模型是Sequelize中的重要部分。是数据库表的一个抽象。在Sequelize中,模型是一个继承了Model的类。

Sequelize中每个模型都有一个名字,这个名字可以不用与数据库表名字相同。默认情况下,数据库表名字是模型名字的复数形式。

比如模型名字为User,默认的,数据表名字为Users。这个默认行为可以通过配置改变。

模型定义

在Sequelize中,Models可以通过以下两种等价方式定义:

1.直接调用sequelize.define(modelName,  attributes, options)方法。

2.继承Model并且调用init(attributes,options)方法。

Model定义后,可以通过sequelize.models.modelName访问该模型。

sequelize.define内部也是通过调用Model.init方法实现的。

Model同步

1.可以通过调用model.sync(options)同步模型和数据库表,这个方法只能同步一个模型

User.sync():如果数据库表不存在,则创建数据库表,如果存在,则不做任何操作

User.sync({ force: true }):如果数据库表已经存在,则先删除数据库表,然后重新创建数据表

User.sync({ alter: true }): 这个会比较数据库表当前状态(比如数据库表的列及数据类型等)与模型的不同之处,然后修改数据库表不同的地方以匹配模型。

2.可以通过调用sequelize.sync()一次同步所有模型。

删除表

1.可以通过调用User.drop()删除与User模型关联的数据表,这种方式只能删除一个表

2.可以通过调用sequelize.drop()一次删除所有的数据库表。

数据库安全检查

数据库的同步sync及删除drop操作都是具有破坏性的。为了安全起见,Sequelize接受一个match选项

sequelize.sync({ force: true, match: /_test$/  })。这样只有当数据库名称以_test结尾时才会执行sync操作

时间戳Timestamps

Sequelize默认给每个model添加createdAt和updatedAt这两个字段,数据类型均为DataTypes.DATE。Sequelize自动管理这些字段。增加或更新一条记录时,Sequelize会自动将当前时间戳赋值给createdAt和updatedAt。这些都是通过Sequelize完成的,并不是SQL出发的。如果直接通过sql语句查询或更新记录,这些字段并不会自动更新。

Models定义为Class的优势

Sequelize Models是ES6的classes。因此可以很容易地往里面添加方法。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值