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:undo2. 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:run3. TypeORM — 适用于 TypeScript 项目的迁移
TypeORM 是一个现代 ORM,同时支持 JavaScript 和 TypeScript。其迁移系统与实体装饰器紧密集成。安装:
npm install typeorm reflect-metadata --savenpm in