Sequelize v5 是 v4 之后的下一个主要版本
Sequelize v5 将仅支持 Node 6 以及更高版本 #9015
在 v4 中,你会开始收到弃用警告 String based operators are now deprecated (基于字符串的运算符现在已弃用) 。 同时也介绍了运算符的概念。这些运算符是一些防止散列注入攻击的符号。
对于 v5
对于 v5 Sequelize现在使用 sequelize-pool ,它是 [email protected] 的现代化分支。 你不再需要调用 sequelize.close 来关闭池,这有助于 lambda 执行。 #8468 。
验证器
现在,当属性的值为 null 且 allowNull 为 true 时,运行每个属性定义的自定义验证器(与模型选项中定义的自定义验证器相对,之前它们没有运行且验证立即成功)。为了避免升级时出现问题,请检查每个属性定义的所有自定义验证器,其中 allowNull 为 true ,并确保当值为 null 时所有这些验证器都能正常运行。 参见 #9143 。
属性
Model.attributes 现在已被移除, 请使用 Model.rawAttributes 。 #5320
注意 : 请不要将它与 options.attributes 混淆,它们仍然有效
偏执模式
对于 v5 如果设置了 deletedAt , 该数据将被视为已删除. paranoid 选项只会使用 deletedAt 作为标志。 #8496
Model.bulkCreate
updateOnDuplicate 选项用于接受布尔值和数组,现在只接受非空的数组属性。 #9288
下划线模式
Model.options.underscored 的实现方式被改变了。你可以在 这里 找到完整的说明 。
大致内容
#9304
删除的别名
许多基于模型的别名已被删除 #9372
范畴
现在只支持一种标准格式 [{ value: 1, inclusive: true }, { value: 20, inclusive: false }] #9364
网络类型
为 Postgres 添加了对 CIDR , INET 和 MACADDR 的支持
不区分大小写的文本
为 Postgres 和 SQLite 添加了对 CITEXT 的支持
已删除
NONE 类型已被删除,请使用 VIRTUAL
删除的别名
Hooks aliases has been removed #9372
删除的别名
已删除许多常量,对象和类的原型引用 #9372
安装非简单:$ npm install --save co
$ npm install --save sequelize
$ npm install --save mysql
代码模板:
var Sequelize = require('sequelize')
var co = require('co')
co(function* () {
// code here
}).catch(function(e) {
console.log(e)
})
基本Sequelize *** 作都返Promiseco框架面直接进行yield非便
建立数据库连接
var sequelize = new Sequelize(
'sample', // 数据库名
'root', // 用户名
'zuki', // 用户密码
{
'dialect': 'mysql', // 数据库使用mysql
'host': 'localhost', // 数据库服务器ip
'port': 3306, // 数据库服务器端口
'define': {
// 字段划线(_)割(默认驼峰命名风格)
'underscored': true
}
}
)
定义单张表
Sequelize:
var User = sequelize.define(
// 默认表名(般写单数)自转换复数形式
// 值作访问模型相关模型属性名所建议用写形式
'user',
// 字段定义(主键、created_at、updated_at默认包含用特殊定义)
{
'emp_id': {
'type': Sequelize.CHAR(10), // 字段类型
'allowNull': false, // 否允许NULL
'unique': true // 字段否UNIQUE
},
'nick': {
'type': Sequelize.CHAR(10),
'allowNull': false
},
'department': {
'type': Sequelize.STRING(64),
'allowNull': true
}
}
)
SQL:
CREATE TABLE IF NOT EXISTS `users` (
`id` INTEGER NOT NULL auto_increment ,
`emp_id` CHAR(10) NOT NULL UNIQUE,
`nick` CHAR(10) NOT NULL,
`department` VARCHAR(64),
`created_at` DATETIME NOT NULL,
`updated_at` DATETIME NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
几点说明:
建表SQL自执行意思主调用sync候类似:User.sync({force: true})(加force:true先删掉表再建表)我先定义表结构再定义Sequelize模型用sync两者定义阶段没关系直我真始 *** 作模型才触及表 *** 作我要尽量保证模型表同步(借助些migration工具)自建表功能风险使用需谨慎
所数据类型请参考文档数据类型
模型定义虚拟属性、类、实例请参考文档:模型定义
其些特殊定义所示:
var User = sequelize.define(
'user',
{
'emp_id': {
'type': Sequelize.CHAR(10), // 字段类型
'allowNull': false, // 否允许NULL
'unique': true // 字段否UNIQUE
},
'nick': {
'type': Sequelize.CHAR(10),
'allowNull': false
},
'department': {
'type': Sequelize.STRING(64),
'allowNull': true
}
},
{
// 自定义表名
'freezeTableName': true,
'tableName': 'xyz_users',
// 否需要增加createdAt、updatedAt、deletedAt字段
'timestamps': true,
// 需要createdAt字段
'createdAt': false,
// updatedAt字段改名
'updatedAt': 'utime'
// deletedAt字段改名
// 同需要设置paranoidtrue(种模式删除数据进行物理删除设置deletedAt前间
'deletedAt': 'dtime',
'paranoid': true
}
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)