导语
Sequelize是用于Postgres,MySQL,MariaDB,SQLite和Microsoft SQL Server的基于Promise的Node.js ORM。它具有可靠的事务支持,关系,急切和延迟加载,读取复制等功能。由于官方文档没有中文版,而且内容比较多,本文章将大部分常用的功能及配置项收集整合出来。
一、模型创建(Model.init)
//创建模型展示
class Project extends Model {}
Project.init({
title: Sequelize.STRING,
description: Sequelize.TEXT
}, { sequelize, modelName: 'project' });
class Task extends Model {}
Task.init({
title: Sequelize.STRING,
description: Sequelize.TEXT,
deadline: Sequelize.DATE
}, { sequelize, modelName: 'task' })
Model相当于数据库中表,有时它也会被称为“模型”或“工厂”。Model不能通过构造函数创建,而只能通过sequlize.define方法来定义或通过sequlize.import导入。通过define定义一个Model,就相当于定义了一种模型与数据表之间的映射关系,通过模型可以实现对表记录的增、删、改、查等操作。Model.init方法可以传入2个参数来配置数据表,参数如下
定义字段(参数一)
- allowNull:Boolean (将allowNull设置为false将向列中添加NOT NULL,这意味着错误将为,如果该列为空,则在执行查询时从数据库中抛出)
- type:Sequelize.xxx(定义数据类型)
- defaultValue:all (设置默认值)
- primarykey:Boolean(定义主键)
- AutoIncrement:Boolean(创建一个自增的整型列)
- comment:String(添加备注描述)
- fieId:String(字段名)
- unique:String/Boolean(创建唯一索引,约束后插入重复值会报错,属性可以是boolean 或 string类型,如果为多个字段添加了相同的字符串那么将会是一个符合唯一键)
定义处理列名的方式(参数二)
- timestamps:Boolean(是否开启时间戳)
- modelName:String(模型的名称,默认为类名,这将控制自动生成的外键和关联命名的名称,一般可以不用修改,使用默认的)
- tableName:String(定义表名)
- parnoaid:Boolean(是否开启假删除,不删除数据库条目,只将deletedAt设置为当前日期,只有启动了时间戳timestamps该字段才生效)
- underscored:Boolean(是否开启下划线(_)分割,默认是驼峰命名)
- version:Boolean/String(启用乐观锁定。启用后,sequelize将添加一个版本计数属性,在保存陈旧实例时抛出一个OptimisticLockingError错误。设置为true或具有要启用的属性名的字符串,默认为false)
- freezeTableName:Boolean(默认表名会根据(defind的第一个参数)转化为复数形式来命名,设置为true时会禁用表名的修改)