安装 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.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();