引言
对于前端开发人员而言,操作关系型数据库和进行 CRUD 操作往往是不可避免的任务。Sequelize 是一款基于 Node.js 的 ORM 框架,它提供了一套强大的 API 用于操作 MySQL、PostgreSQL、SQLite 和 Microsoft SQL Server 等关系型数据库,用于简化代码,减少繁琐的 SQL 串接。与传统的 ORM 框架相比,Sequelize 有很高的可定制性和灵活性,以适应各种复杂的业务场景。
Sequelize-cli 是 Sequelize 的命令行工具,用于方便地管理数据库。本文将详细介绍如何使用 Sequelize-cli 进行数据库自动生成,并结合示例代码进行讲解。
准备工作
- 安装 Node.js 环境
- 安装 MySQL 数据库
- 安装 Sequelize 和 Sequelize-cli
npm install --save sequelize npm install --save-dev sequelize-cli
初始化项目
创建一个新的项目,并使用 Sequelize-cli 初始化数据库配置
mkdir blog cd blog npm init -y npx sequelize-cli init
执行完初始化之后,会在项目根目录下生成四个目录:
- config: 用于存放数据库配置文件
- migrations: 用于存放数据库迁移脚本
- models: 用于存放模型定义文件
- seeders: 用于存放数据库种子数据
创建模型
使用 Sequelize-cli 创建一个新的模型
npx sequelize-cli model:generate --name User --attributes email:string,password:string
执行完上述命令之后,会在 models 目录下生成一个新的名为 User.js 的文件,该文件定义了一个名为 User 的模型。
// www.javascriptcn.com code example
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
static associate(models) {
// define association here
}
};
User.init({
email: DataTypes.STRING,
password: DataTypes.STRING
}, {
sequelize,
modelName: 'User',
});
return User;
};模型文件中包含以下内容:
- 引入了
sequelize和Model类 - 使用
Model.init方法定义了User模型的属性和配置项 - 定义了
static associate方法,用于配置模型之间的关联关系,暂时为空
数据库迁移
在创建完模型之后,需要执行数据库迁移,使得数据库中包含对应的表结构。
使用 Sequelize-cli 创建一个新的迁移脚本
npx sequelize-cli migration:generate --name create-users
执行完上述命令之后,会在 migrations 目录下生成一个新的名为 xxxxxx-create-users.js 的文件,该文件定义了一个名为 create-users 的迁移脚本。
// www.javascriptcn.com code example
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};迁移脚本中包含以下内容:
- 使用
queryInterface.createTable方法定义了一个名为Users的表,包含对应的字段和类型 - 使用
queryInterface.dropTable方法定义了撤销迁移的操作
执行数据库迁移
npx sequelize-cli db:migrate
执行完上述命令之后,可以在数据库中看到名为 Users 的表已经被成功创建。
模型操作
使用模型进行数据库操作前,需要先对模型进行配置。
使用 models/index.js 文件来配置所有模型,其中包含了数据库的连接信息和每个模型的定义。在 models/index.js 中添加以下代码:
// www.javascriptcn.com code example
'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;在 models/index.js 文件中,使用 readdirSync 方法读取 models 目录下的所有文件,将每个模型导入到 db 对象中,并通过 associate 方法建立模型之间的关联关系。最后,将 sequelize 和 Sequelize 实例导出。
在进行模型操作前,需要先使用 require 方法引入 models/index.js 文件,从而获得所有模型的实例。在 app.js 文件中添加以下代码。
const models = require('./models');使用模型进行数据库操作。以下为一些基本操作的示例代码。
增加记录
models.User.create({
email: 'test@example.com',
password: '123456'
}).then(user => {
console.log(user.toJSON());
});使用 create 方法创建一个新的 User 记录,并打印出数据库返回的 JSON 数据。此时,数据库中将会增加一条 email 为 test@example.com 的新记录。
查找记录
models.User.findOne({
where: {
email: 'test@example.com'
}
}).then(user => {
console.log(user.toJSON());
});使用 findOne 方法查找符合特定条件的一条记录,并打印出数据库返回的 JSON 数据。
修改记录
// www.javascriptcn.com code example
models.User.update({
password: '654321'
}, {
where: {
email: 'test@example.com'
}
}).then(() => {
console.log('密码已修改');
});使用 update 方法修改符合特定条件的记录,并在操作成功后打印提示信息。此时,数据库中与 email 为 test@example.com 相关的记录中的 password 字段将会被改为 654321。
删除记录
models.User.destroy({
where: {
email: 'test@example.com'
}
}).then(() => {
console.log('用户已删除');
});使用 destroy 方法删除符合特定条件的记录,并在操作成功后打印提示信息。此时,数据库中与 email 为 test@example.com 相关的记录将被删除。
结语
Sequelize-cli 是 Sequelize 操作数据库的重要工具,它大大简化了数据库操作的流程,为开发者节省了时间和精力。本文简要介绍了如何使用 Sequelize-cli 进行数据库自动生成,并结合示例代码进行详细讲解,希望能为读者提供指导和帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c6ff7bcc0f7239cde844ac