nodejs-sequelize扩展使用

微信扫一扫,分享到朋友圈

nodejs-sequelize扩展使用

安装Sequelize

npm i sequelize

驱动安装(选择以下其一)

npm install --save pg pg-hstore # Postgres
npm install --save mysql2
npm install --save mariadb
npm install --save sqlite3
npm install --save tedious # Microsoft SQL Server

连接数据库测试连接初次体验

导入sequelize包

创建sequelize实例(通过实例构造方法传入参数创建连接数据库地址)

.authenticate()
函数测试连接是否正常

const Sequelize = require('sequelize');
const sequelize = new Sequelize('dog', 'root', '123456', {
host: 'localhost',
/* 选择 'mysql' | 'mariadb' | 'postgres' | 'mssql' 其一 */
dialect: 'mysql'
});
try {
sequelize.authenticate();
console.log("ok");
} catch (err) {
console.log(err)
}
构造函数参数详解

https://sequelize.org/master/…

关闭连接

默认情况下,在保持连接打开的状态,并对所有的查询使用相同的连接

sequelize.close()

模型模型

模型的本质其实是代表的是数据库中表的抽象,包含数据库表的 名称
以及该名称下所具有的
(以及列的数据类型)

模型定义-define方式

sequelize.define(modelName, attributes, options)

eg:定义一个user模型

const {Sequelize,DataTypes} = require('sequelize');
const sequelize = new Sequelize('dog', 'root', '123456', {
host: 'localhost',
dialect: 'mysql'
});
const User = sequelize.define('User',{
firstname:{
type:DataTypes.STRING,
allowNull:false
},
lastname:{
type:DataTypes.STRING,
//allowNull 默认 true
}
},{
//其他模型参数
});
console.log(User === sequelize.models.User)

模型定义-init方式

const {
Sequelize,
DataTypes,
Model
} = require('sequelize');
const sequelize = new Sequelize('sequelize', 'root', '123456', {
host: 'localhost',
/* 选择 'mysql' | 'mariadb' | 'postgres' | 'mssql' 其一 */
dialect: 'mysql'
});
class User extends Model {}
User.init({
firstname: {
type: DataTypes.STRING,
allowNull: false,
},
lastname: {
type: DataTypes.STRING,
}
}, {
sequelize,
modelName: 'User'
});
console.log(User === sequelize.models.User)

sequelize.define
model.init
是等效的

字段属性设置

默认值

const User = sequelize.define('User', {
firstname: {
type: DataTypes.STRING,
defaultValue:"zhiqiang"
},
........
}, {
//其他模型参数
});

注释

const User = sequelize.define('User', {
firstname: {
type: DataTypes.STRING,
defaultValue:"zhiqiang",
comment:"注释"
},
}, {
//其他模型参数
});

Type可用的字段类型

数据库结构生成器包含构建表时可以指定的各种字段类型:

数据类型 方法名称 描述
字符串 DataTypes.STRING VARCHAR(255)
DataTypes.STRING(100) VARCHAR(100)
DataTypes.STRING.BINARY VARCHAR BINARY
DataTypes.TEXT TEXT
DataTypes.TEXT(‘tiny’) TINYTEXT
DataTypes.CITEXT CITEXT 仅 PostgreSQL 和 SQLite.
布尔 DataTypes.BOOLEAN TINYINT(1)
数字 DataTypes.INTEGER INTEGER
DataTypes.BIGINT BIGINT
DataTypes.BIGINT(11) BIGINT(11)
DataTypes.FLOAT FLOAT
DataTypes.FLOAT(11) FLOAT(11)
DataTypes.FLOAT(11, 10) FLOAT(11,10)
DataTypes.REAL REAL 仅 PostgreSQL
DataTypes.REAL(11) REAL(11) 仅 PostgreSQL.
DataTypes.REAL(11, 12) REAL(11,12) 仅 PostgreSQL.
DataTypes.DOUBLE DOUBLE
DataTypes.DOUBLE(11) DOUBLE(11)
DataTypes.DOUBLE(11, 10) DOUBLE(11,10)
DataTypes.DECIMAL DECIMAL
DataTypes.DECIMAL(10, 2) DECIMAL(10,2)
DataTypes.INTEGER.UNSIGNED MySQL 和 MariaDB 设置为无符号或零填充
DataTypes.INTEGER.ZEROFILL MySQL 和 MariaDB设置为无符号或零填充
DataTypes.INTEGER.UNSIGNED.ZEROFILL MySQL 和 MariaDB设置为无符号或零填充
日期 DataTypes.DATE DATETIME 适用于 mysql / sqlite,
DataTypes.DATE(6) DATETIME(6) 适用于 mysql 5.6.4+
DataTypes.DATEONLY 不带时间的 DATE
UUID DataTypes.UUID

对于 PostgreSQL 和 SQLite,它会是 UUID
数据类型,对于mysql会变成 char(36)
,UUID默认值设置

{
type: DataTypes.UUID,
defaultValue: Sequelize.UUIDV4 // 或 Sequelize.UUIDV1
}

其他属性设置

表名复数

自定义表名

表名复数

在默认情况下,关联到数据库的表名为 Users

增加配置 去掉复数的方式

方式一:全局配置,在实例化的时候增加freezeTableName配置

const sequelize = new Sequelize('sequelize', 'root', '123456', {
host: 'localhost',
dialect: 'mysql',
define: {
freezeTableName :true
}
});

方式二:单独模型配置

// define 方式定义模型
const User = sequelize.define('User', {
.........
}, {
//其他模型参数
//强制表名和模型名称保持一致
freezeTableNAme: true
});

自定义表名

const User = sequelize.define('User', {
.....
}, {
//其他模型参数
// 自定义表名
tableName:"zq_user"
});

时间戳createdAt/updatedAt

// define 方式定义模型
const User = sequelize.define('User', {
.....
}, {
// 去掉createdAt/updatedAt
// timestamps:false
// 去掉 createdAt
// createdAt:false,
// //去掉 updatedAt
// updatedAt:false,
});

模型同步表

// //用户模型同步到数据库中
// User.sync({force:true})
//生成的sql
CREATE TABLE IF NOT EXISTS `zq_user` (`id` INTEGER NOT NULL auto_increment , `firstname` VARCHAR(255) NOT NULL, `lastname` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
// //一次性同步所有的
// sequelize.sync({force:true})

删除表

// 删除指定用户表
// User.drop();
// 删除所有的表
// sequelize.drop();

经福特中国工程师测试,福特车漆经得住考验?

上一篇

国双:大数据BI助力企业数智化转型

下一篇

你也可能喜欢

nodejs-sequelize扩展使用

长按储存图像,分享给朋友