乐趣区

nodejssequelize扩展使用

安装 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)

函数详解

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.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();
退出移动版