定义与同步模型

80 阅读3分钟

sequelize是通过define⽅法建⽴模型的,Model相当于数据库中的表,该对象不能通过构造函数实例 化,⽽只能通过sequelize.define()或sequelize.import()⽅法创建。
const TestTable = sequelize.define('project', {
title: Sequelize.STRING,
description: Sequelize.TEXT
})
通过上⾯的⽅法创建好model之后,使⽤Navicat(数据库可视化⼯具)仍然⽆法看到我们所创建的表, sequelize提供了⼀个sync()⽅法可以同步模型到数据库。使⽤该⽅法的时候⼀定要注意所连接的数据库⼀定要存在否 则会报错。
define⽅法接收三个参数,第⼀个参数为表名称,第⼆个为所需要创建的数据库字段,第三个参数是相 关表配置。
const TestTable = sequelize.define('project', {
title: Sequelize.STRING,
description: Sequelize.TEXT
});
AaronTest.sync();
这样model所创建的字段就被同步到了数据库中,同样相对应的表也被创建好了,需要注意通过这种⽅式 同步的表 会在表名称后⾯添加⼀个s作为复数。同步数据库是会默认添加两个字段createdAt和updatedAt有的时候 可能不需 要这两个字段。这个时候需要在第三个字段中添加timestamps为false默认为true。
const { sequelize, DataTypes, Op } = require("../config/database"); // 第⼀个参数't_car'是模型的名称,如果不指定tableName,
// 则sequelize将会使⽤传⼊的'模型名称'作为表名,并且
// 如果这个'模型名称'结尾不带s,sequelize将会尝试添加s来作为表名
const Tcar = sequelize.define('t_car', {
id: {
type: DataTypes.BIGINT,
primaryKey: true,
autoIncrement: true,
allowNull: false,
comment: "主键"
},
car_num: {
type: DataTypes.STRING(255),
allowNull: true,
defaultValue: null },
brand: {
type: DataTypes.STRING(255),
allowNull: true,
defaultValue: null
},
guide_price: {
type: DataTypes.DECIMAL(10, 2),
allowNull: true,
defaultValue: null
},
product_time: {
type: DataTypes.CHAR(10),
allowNull: true,
defaultValue: null
},
car_type: {
type: DataTypes.STRING(255),
allowNull: true,
defaultValue: null }
}, {
tableName: 't_car',
timestamps: false,
});
// 注释tableName和timestamps的结果
// SELECT id, car_num, brand, guide_price, product_time,
// car_type, createdAt, updatedAt FROM t_cars AS t_car;
// 不注释tableName和timestamps的结果
// SELECT id, car_num, brand, guide_price, product_time,
// car_type FROM t_car AS t_car;
module.exports = Tcar;
STRING 将字段指定为变⻓字符串类型,默认⻓度为 255。Sequelize.STRING(64) CHAR 将字段指定为定⻓字符串类型,默认⻓度为 255。Sequelize.CHAR(64) TEXT 将字段指定为(⽆)有限⻓度的⽂本列。可⽤⻓度: tiny,medium,long,Sequelize.TEXT('tiny')
INTEGER 32位整型,可⽤属性:UNSIGNED,ZEROFILL, Sequelize.INTEGER('UNSIGNED')
BOOLEAN ⼩数,接受⼀个或两个参数表示精度,Sequelize.BOOLEAN()
TIME 指定为时间类型列,Sequelize.TIME()
DATE 指定为⽇期时间类型列,Sequelize.DATE()
DATEONLY 指定为⽇期类型列,Sequelize.DATEONLY()
HSTORE 指定为键/值类型列,仅Postgres适⽤,Sequelize.HSTORE()
JSON 指定为JSON字符串类型列,仅Postgres适⽤,Sequelize.JSON()
JSONB 指定为预处理的JSON数据列,仅Postgres适⽤,Sequelize.JSONB()
NOW ⼀个表示当前时间戳的默认值,Sequelize.NOW()
UUID UUID类型列,其默认值可以为UUIDV1或UUIDV4,Sequelize.UUID()
ENUM 枚举类型,Sequelize.ENUM()
ARRAY 数组类型,仅Postgres适⽤,Sequelize.ARRAY()
设定model的时候在添加第三个参数可以对当前model进⾏⼆次设置,以使数据库更加强壮,常⽤字段如下
timestamps:不要添加时间戳属性 (updatedAt, createdAt)
paranoid:paranoid 属性只在启⽤ timestamps 时适⽤,不从数据库中删除数据,⽽只是增加⼀个 deletedAt 标识当前时间,我们常说的逻辑删除
underscored: 不使⽤驼峰式命令规则,这样会在使⽤下划线分隔,updatedAt的字段名会是 updated_at
freezeTableName:禁⽌修改表名. 默认情况下sequelize会⾃动使⽤传⼊的模型名(define的第⼀ 个参数)做为表名,如果你不想使⽤这种⽅式你需要进⾏以下设置
tableName:定义表名
createdAt:不想使⽤ createdAt
updatedAt:想 updatedAt 的实际名为***
deletedAt: 要将 deletedAt 设置为 destroyTime
当创建model的时候可能需要有些附加属性,⽐如主键,⾃增,不能为null,默认值等等,可以在创建model 的时候进⾏⼿动设置。
autoIncrement:是否⾃增
references:通过references选项可以创建外键
allowNull:设置 allowNull 选项为 false 后,会为列添加 NOT NULL ⾮空限制 defaultValue:设置默认值
type:字段类型
unique:添加唯⼀(unique)约束后插⼊重复值会报错,unique属性可以是boolean 或 string类型
primaryKey:设置为主键
comment:字段描述
field:指定数据库中的字段名