feat(数据库迁移): 为线缆表添加新字段并改进迁移脚本

添加 cableLabel、cableColor 等新字段到 cables 表
重构迁移脚本以支持多种数据库方言
This commit is contained in:
zhang1106
2026-03-31 14:44:25 +08:00
parent 06e3b56469
commit 44137bb851
2 changed files with 50 additions and 20 deletions
+43 -20
View File
@@ -1,13 +1,26 @@
const { sequelize } = require('../db');
const Cable = require('../models/Cable');
const { sequelize, dbDialect } = require('../db');
async function getTableColumns(tableName) {
if (dbDialect === 'sqlite') {
const results = await sequelize.query(`PRAGMA table_info(${tableName})`, {
type: sequelize.QueryTypes.SELECT,
});
return results.map(row => row.name);
} else {
const results = await sequelize.query(`SHOW COLUMNS FROM ${tableName}`, {
type: sequelize.QueryTypes.SELECT,
});
return results.map(row => row.Field);
}
}
async function migrateCableFields() {
try {
console.log('开始迁移 Cable 模型字段...');
const tableName = 'cables';
// 检查字段是否已存在
const [results] = await sequelize.query('PRAGMA table_info(cables)');
const existingColumns = results.map(row => row.name);
try {
console.log(`开始迁移 ${tableName} 表新字段...`);
const existingColumns = await getTableColumns(tableName);
const newColumns = [
{ name: 'cableLabel', type: 'VARCHAR(255)' },
@@ -19,24 +32,34 @@ async function migrateCableFields() {
for (const column of newColumns) {
if (!existingColumns.includes(column.name)) {
console.log(`添加字段: ${column.name}`);
await sequelize.query(`ALTER TABLE cables ADD COLUMN ${column.name} ${column.type}`);
if (dbDialect === 'sqlite') {
await sequelize.query(`ALTER TABLE ${tableName} ADD COLUMN ${column.name} ${column.type}`);
} else {
await sequelize.query(`ALTER TABLE ${tableName} ADD COLUMN ${column.name} ${column.type}`);
}
console.log(` ✓ 添加字段: ${column.name}`);
} else {
console.log(`字段已存在: ${column.name}`);
console.log(`字段已存在: ${column.name}`);
}
}
console.log('迁移完成!');
console.log('\n新增字段:');
console.log(' - cableLabel: 线缆标签/编号');
console.log(' - cableColor: 线缆颜色(便于识别)');
console.log(' - installedBy: 安装人');
console.log(' - installedAt: 安装时间');
console.log(' - lastTestedAt: 上次测试时间');
console.log(`${tableName} 表字段迁移完成`);
} catch (error) {
console.error('迁移失败:', error);
process.exit(1);
console.error(` ✗ 迁移失败: ${error.message}`);
throw error;
}
}
migrateCableFields();
if (require.main === module) {
migrateCableFields()
.then(() => {
console.log('迁移完成!');
process.exit(0);
})
.catch(err => {
console.error('迁移执行失败:', err);
process.exit(1);
});
}
module.exports = { migrateCableFields };