前言
在网站或应用开发中,数据库是扮演着重要角色的一个组件。在今天,我们有许多数据库选项,例如:MongoDB、MySQL、PostgreSQL等等。而在开发过程中,我们通常也需要管理我们的数据库。这篇文章将会向大家介绍如何在 Express.js 中使用 Sequelize-CLI 进行数据库管理。
什么是 Sequelize-CLI
Sequelize-CLI 是 Sequelize 的命令行工具,我们可以使用它来初始化、迁移和填充我们的数据库。Sequelize-CLI 还提供了几个基本的命令来执行这些任务。它还支持 Node.js 的生命周期,使我们的数据库管理更加容易。
使用 Sequelize-CLI
安装
首先,我们需要全局安装 Sequelize-CLI
npm install -g sequelize-cli
初始化
接下来,我们将初始化一个新的 Sequelize 项目。我们可以使用以下命令快速创建一个新的 Sequelize 项目
sequelize init
此命令初始化一个新的 Sequelize 项目,包括一个新的文件夹 /config 用于数据库配置和 /migrations 用于迁移。
配置
接下来,我们需要在 config 文件夹下创建 config.json 文件,以定义如何与数据库交互。
// javascriptcn.com 代码示例 { "development": { "username": "root", "password": null, "database": "database_development", "host": "127.0.0.1", "dialect": "mysql" }, "test": { "username": "root", "password": null, "database": "database_test", "host": "127.0.0.1", "dialect": "mysql" }, "production": { "username": "root", "password": null, "database": "database_production", "host": "127.0.0.1", "dialect": "mysql" } }
以上配置是通过 json 格式来管理的,分别定义了 development、test 和 production 三种不同环境下的数据库信息。
创建模型
接下来,我们要使用 Sequelize-CLI 来创建模型文件。模型是映射到数据库表的 JavaScript 对象。我们可以使用以下命令来创建模型:
sequelize model:generate --name User --attributes firstName:string,lastName:string,email:string
以上命令是以 "User" 为名称并创建一个新的模型。模型包含三个属性:firstName、lastName 和 email,它们都是字符串数据类型。
模型文件将会在项目的 /models 目录下生成。同时,会在 migrations 目录下生成一个新的文件,与模型关联起来,管理表的迁移。
数据库迁移
接下来,我们要在数据库中创建新表。我们可以使用以下命令来执行数据库迁移:
sequelize db:migrate
以上命令将会执行 /migrations 目录下的所有迁移文件。如果我们对某些已经迁移的操作进行了修改,我们应该使用以下命令进行回滚:
sequelize db:migrate:undo
以上命令将会撤销最新的迁移。
初始化数据
最后,我们需要向数据库中填充数据。我们可以使用 Sequelize-CLI 提供的 seed 命令来填充数据。
首先我们需要通过下面的命令来生成一个 seeds 文件
sequelize seed:generate --name demo-user
以上命令将会在当前目录下创建一个 seeds 目录,并在该目录下创建一个名为 "demo-user" 的文件。
接下来,我们可以在 "demo-user.js" 中添加以下代码,向数据库中添加用户信息:
// javascriptcn.com 代码示例 'use strict'; module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.bulkInsert('Users', [ { firstName: 'John', lastName: 'Doe', email: 'johndoe@mail.com' }, { firstName: 'Jane', lastName: 'Doe', email: 'janedoe@mail.com' }, ], {}); }, down: async (queryInterface, Sequelize) => { await queryInterface.bulkDelete('Users', null, {}); } };
以上代码中,我们使用了 queryInterface 提供的 bulkInsert 和 bulkDelete 函数,向数据库中添加和删除记录。
最后,我们可以使用以下命令执行此 Seed 文件:
sequelize db:seed --seed demo-user
以上命令将会执行 Seeds 文件的 up 函数,向数据库中添加记录。
总结
Sequelize-CLI 是一个非常方便的用于管理 Sequelize 项目的工具。使用 Sequelize-CLI 我们可以轻松的进行数据库的迁移,填充以及回滚。这样可以更好的保持我们的数据库的结构的一致性。尤其是在大型项目中,管理数据库将变得更加便利,开发效率也更加高效。
示例代码
以上是我们如何在 Sequelize 中使用 Sequelize-CLI 进行数据库管理的详细指导,下面是对应的示例代码
models/User.js
// javascriptcn.com 代码示例 'use strict'; const { Model } = require('sequelize'); module.exports = (sequelize, DataTypes) => { class User extends Model { static associate(models) { // define association here } }; User.init({ firstName: DataTypes.STRING, lastName: DataTypes.STRING, email: DataTypes.STRING }, { sequelize, modelName: 'User', }); return User; };
migrations/20210623143423-create-user.js
// javascriptcn.com 代码示例 'use strict'; module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable('Users', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, firstName: { type: Sequelize.STRING }, lastName: { type: Sequelize.STRING }, email: { type: Sequelize.STRING, unique: true // 添加 unique 约束,保证 email 唯一性 }, createdAt: { allowNull: false, type: Sequelize.DATE }, updatedAt: { allowNull: false, type: Sequelize.DATE } }); }, down: async (queryInterface, Sequelize) => { await queryInterface.dropTable('Users'); } };
seeds/demo-user.js
// javascriptcn.com 代码示例 'use strict'; module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.bulkInsert('Users', [ { firstName: 'John', lastName: 'Doe', email: 'johndoe@mail.com' }, { firstName: 'Jane', lastName: 'Doe', email: 'janedoe@mail.com' }, ], {}); }, down: async (queryInterface, Sequelize) => { await queryInterface.bulkDelete('Users', null, {}); } };
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653a18a17d4982a6eb3e0b97