Node.js 中的数据库迁移:Sequelize、Knex 和 TypeORM

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

JavaScript (Node.js) 中的数据库迁移:工具全面概述



数据库迁移是一种对数据库模式进行受控和版本化更改的方式。在 Node.js 世界中,有几个强大的库可以自动化此过程。在本文中,我们将介绍三种最流行的工具:Sequelize、Knex.js 和 TypeORM。



什么是迁移以及为什么需要它们?

迁移解决了开发人员和环境(开发、预发布、生产)之间数据库结构同步的问题。您无需手动执行 SQL 脚本,而是用 JavaScript/TypeScript 代码描述更改。优点:

  • 自动应用更改
  • 能够回滚到以前的版本
  • 在存储库中保存更改历史记录
  • 支持不同的数据库管理系统(PostgreSQL、MySQL、SQLite 等)


1. Sequelize — 具有内置迁移系统的 ORM

Sequelize 是 Node.js 最流行的 ORM 之一。它提供了一个用于管理迁移的 CLI 工具。安装:

npm install --save sequelizenpm install --save-dev sequelize-clinpx sequelize-cli init

初始化后,会创建 migrations、models、seeders 文件夹和配置文件 config/config.json。



创建迁移

npx sequelize-cli migration:generate --name create-users-table

迁移内容示例:

'use strict';module.exports = {  up: async (queryInterface, Sequelize) => {    await queryInterface.createTable('Users', {      id: {        type: Sequelize.INTEGER,        primaryKey: true,        autoIncrement: true      },      username: {        type: Sequelize.STRING,        allowNull: false,        unique: true      },      email: {        type: Sequelize.STRING,        allowNull: false      },      createdAt: {        type: Sequelize.DATE,        allowNull: false      },      updatedAt: {        type: Sequelize.DATE,        allowNull: false      }    });  },  down: async (queryInterface, Sequelize) => {    await queryInterface.dropTable('Users');  }};


应用和回滚

npx sequelize-cli db:migratenpx sequelize-cli db:migrate:undo


2. Knex.js — 带有迁移功能的 SQL 查询构建器

Knex.js 不是 ORM,而是一个强大的查询构建器。它的迁移系统被认为是最灵活的系统之一。安装:

npm install knex --savenpm install pg --save  # 或 mysql, sqlite3npx knex init


创建和编写迁移

npx knex migrate:make create_posts_table

代码示例:

exports.up = function(knex) {  return knex.schema.createTable('posts', (table) => {    table.increments('id').primary();    table.string('title', 255).notNullable();    table.text('content');    table.integer('user_id').unsigned().references('id').inTable('users');    table.timestamps(true, true);  });};

exports.down = function(knex) { return knex.schema.dropTableIfExists('posts');};


操作命令

npx knex migrate:latestnpx knex migrate:rollbacknpx knex migrate:status  # 查看状态

Knex 还支持用于初始数据填充的“种子”文件:

npx knex seed:make 01_demo_usersnpx knex seed:run


3. TypeORM — 适用于 TypeScript 项目的迁移

TypeORM 是一个现代 ORM,同时支持 JavaScript 和 TypeScript。其迁移系统与实体装饰器紧密集成。安装:

npm install typeorm reflect-metadata --savenpm in                    

推荐