Sequelize 中文API文档-9. 数据类型类 DataTypes 及其API在使用

sequelize.define方法定义模型时,我们一般会为模型属性(列)指定类型type,它表示数据类型,Sequelize会按指定的类型在数据库中创建字段。这些类型被定义到了sequelize模块的DataTypes类中,它是一个静态类可以直接引用其属性或方法。

  1. DataTypes
  2. DataTypes类中的API

1. DataTypes

DataTypes是一个含有常用数据类型的类,它用于使用sequelize.define()方法定义模型时指定列的数据类型:

sequelize.define('model', {
  column: DataTypes.INTEGER
})

注意:我们也可以通过模块的顶级对象Sequelize来引用指定的类型,如Sequelize.INTEGER,这种只是对DataTypes类中相关属性的一个便捷引用,其本质上还是引用了DataTypes类中相关属性。

在定义模型时,我们可以简单的传入一个字符串表示数据类型,但更多的时候是使用类型定义。如,使用DataTypes.BLOB时,Sequelize获取后会返回一个Buffer实例。

某些数据类型具有可访问的特殊属性,以便更改数据类型。如,与要补零得到一个无符号整数,可以使用DataTypes.INTEGER.UNSIGNED.ZEROFILL

为数据类型指定长度时,可以像函数一样引用:INTEGER(2)

NOWUUIDV1UUIDV4这三个是用于指定默认值,所以不能用于类型定义。如,定义一个UUID类型并指定默认值为v1版本的uuid:

sequelize.define('model', {
  uuid: {
    type: DataTypes.UUID,
    defaultValue: DataTypes.UUIDV1,
    primaryKey: true
  }
})

如果想想自己的算法生成自定义的UUID默认值,可以为defaultValue指定一个返回UUID的函数:

sequelize.define('model', {
  uuid: {
    type: DataTypes.UUID,
    defaultValue: function() {
      return generateMyId()
    },
    primaryKey: true
  }
})


2. DataTypes类中的API

2.1 STRING() - 变长字符串
STRING()
STRING(64)

将字段指定为变长字符串类型。默认长度为 255

可用属性:BINARY


2.2 CHAR() - 定长字符串
CHAR()
CHAR(64)

将字段指定为定长字符串类型。默认长度为 255

可用属性:BINARY


2.3 TEXT() - 指定为文本列
TEXT()

将字段指定为(无)有限长度的文本列。可用长度:tinymediumlong


2.4 INTEGER() - 整型
INTEGER()

32位整型

可用属性:UNSIGNED,ZEROFILL


2.5 BIGINT() - 长整型
BIGINT()

64位整型

可用属性:UNSIGNED,ZEROFILL


2.6 FLOAT() - 浮点数
FLOAT()

4位精度的浮点数,接受一个或两个参数表示精度

可用属性:UNSIGNED,ZEROFILL


2.7 REAL() - 浮点数
REAL()

4位精度的浮点数,接受一个或两个参数表示精度

可用属性:UNSIGNED,ZEROFILL


2.8 DOUBLE() - 双精度浮点数
DOUBLE()

8位精度的浮点数,接受一个或两个参数表示精度

可用属性:UNSIGNED,ZEROFILL


2.9 DECIMAL() - 小数
DECIMAL()

小数,接受一个或两个参数表示精度

可用属性:UNSIGNED,ZEROFILL


2.10 BOOLEAN() - 布尔
BOOLEAN()

小数,接受一个或两个参数表示精度


2.11 TIME() - 时间类型
TIME()

指定为时间类型列


2.12 DATE() - 日期时间类型
DATE()

指定为日期时间类型列


2.13 DATEONLY() - 日期类型
DATEONLY()

指定为日期类型列


2.14 HSTORE() - 键/值类型
HSTORE()

指定为键/值类型列,仅Postgres适用


2.15 JSON() - JSON字符串类型
JSON()

指定为JSON字符串类型列,仅Postgres适用


2.16 JSONB() - JSONB类型
JSONB()

指定为预处理的JSON数据列,仅Postgres适用


2.17 NOW() - 时间默认值
NOW()

一个表示当前时间戳的默认值


2.18 BLOB() - 二进制类型
BLOB()

二进制存储类型,可用长度:tinymediumlong


2.19 RANGE() - Range类型
RANGE()

Range类型是表示某种元素类型的值范围的数据类型,仅Postgres适用


2.20 UUID() - UUID类型
UUID()

UUID类型列,其默认值可以为UUIDV1UUIDV4


2.21 UUIDV1() - UUID v1 默认值
UUIDV1()

设置UUID类型列,的默认值为 UUID v1


2.22 UUIDV4() - UUID v4 默认值
UUIDV4()

设置UUID类型列,的默认值为 UUID v4


2.23 VIRTUAL() - 虚拟值
VIRTUAL()

一个不存储在数据库中的虚拟值。这种列在类型在需要提供一个默认值,但又不需要将其存储到数据库中时很适用。

也可以用于在重新排列和存储前进行验证。如,对密码做哈希运算前进行长度验证:

sequelize.define('user', {
  password_hash: DataTypes.STRING,
  password: {
    type: DataTypes.VIRTUAL,
    set: function (val) {
       this.setDataValue('password', val); 
       this.setDataValue('password_hash', this.salt + val);
     },
     validate: {
        isLongEnough: function (val) {
          if (val.length < 7) {
            throw new Error("Please choose a longer password")
         }
      }
    }
  }
})

在上面代码中,密码字段是存在的所以可以进行验证,但由于是虚拟类型,并不会将其存入数据库中。

别名:NONE


2.24 ENUM() - 枚举
ENUM()
DataTypes.ENUM('value', 'another value')

枚举类型


2.25 ARRAY() - 数组
ARRAY()
DataTypes.ARRAY(DataTypes.DECIMAL)

数组类型,仅Postgres适用


2.26 GEOMETRY() - 几何类型
ARRAY()
DataTypes.ARRAY(DataTypes.DECIMAL)

几何类型,仅Postgres(PostGIS)及MySQL适用。在MySQL中可用的几何类型有:'POINT'、'LINESTRING'、'POLYGON'

使用时,GeoJSON是可用的输入和返回值。

在PostGIS中,GeoJSON通过PostGIS函数ST_GeomFromGeoJSON进行转换;而在MySQL中使用GeomFromText函数。

// 创建一个点:
var point = { type: 'Point', coordinates: [39.807222,-76.984722]};

User.create({username: 'username', geometry: point }).then(function(newUser) {
...
});

// 创建一个新的线:
var line = { type: 'LineString', 'coordinates': [ [100.0, 0.0], [101.0, 1.0] ] };

User.create({username: 'username', geometry: line }).then(function(newUser) {
...
});

// 创建一个几何:
var polygon = { type: 'Polygon', coordinates: [
                [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
                  [100.0, 1.0], [100.0, 0.0] ] 
                ]};

User.create({username: 'username', geometry: polygon }).then(function(newUser) {
...
});

// 使用自定义的 SRID 创建点:
var point = { 
  type: 'Point', 
  coordinates: [39.807222,-76.984722],
  crs: { type: 'name', properties: { name: 'EPSG:4326'} }
};

User.create({username: 'username', geometry: point }).then(function(newUser) {
...
});


2.27 GEOGRAPHY() - 地理类型
GEOGRAPHY()
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值