安装Sequelize

npm i sequelize

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

npm install --save pg pg-hstore # Postgresnpm install --save mysql2npm install --save mariadbnpm install --save sqlite3npm 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)
函数详解

https://sequelize.org/master/...

https://sequelize.org/master/...

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.definemodel.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.STRINGVARCHAR(255)
DataTypes.STRING(100)VARCHAR(100)
DataTypes.STRING.BINARYVARCHAR BINARY
DataTypes.TEXTTEXT
DataTypes.TEXT('tiny')TINYTEXT
DataTypes.CITEXTCITEXT 仅 PostgreSQL 和 SQLite.
布尔DataTypes.BOOLEANTINYINT(1)
数字DataTypes.INTEGERINTEGER
DataTypes.BIGINTBIGINT
DataTypes.BIGINT(11)BIGINT(11)
DataTypes.FLOATFLOAT
DataTypes.FLOAT(11)FLOAT(11)
DataTypes.FLOAT(11, 10)FLOAT(11,10)
DataTypes.REALREAL 仅 PostgreSQL
DataTypes.REAL(11)REAL(11) 仅 PostgreSQL.
DataTypes.REAL(11, 12)REAL(11,12) 仅 PostgreSQL.
DataTypes.DOUBLEDOUBLE
DataTypes.DOUBLE(11)DOUBLE(11)
DataTypes.DOUBLE(11, 10)DOUBLE(11,10)
DataTypes.DECIMALDECIMAL
DataTypes.DECIMAL(10, 2)DECIMAL(10,2)
DataTypes.INTEGER.UNSIGNEDMySQL 和 MariaDB 设置为无符号或零填充
DataTypes.INTEGER.ZEROFILLMySQL 和 MariaDB设置为无符号或零填充
DataTypes.INTEGER.UNSIGNED.ZEROFILLMySQL 和 MariaDB设置为无符号或零填充
日期DataTypes.DATEDATETIME 适用于 mysql / sqlite,
DataTypes.DATE(6)DATETIME(6) 适用于 mysql 5.6.4+
DataTypes.DATEONLY不带时间的 DATE
UUIDDataTypes.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})//生成的sqlCREATE 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();