Files
aiapply/migrate-prompt-template-data.js

161 lines
5.7 KiB
JavaScript
Raw Permalink Normal View History

2025-09-06 08:28:47 +08:00
const mysql = require('mysql2/promise');
// 数据库连接配置
const dbConfig = {
host: 'gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com',
port: 24936,
user: 'root',
password: '!Rjb12191',
database: 'pronode_db',
charset: 'utf8mb4'
};
async function migratePromptTemplateData() {
let connection;
try {
console.log('🔗 连接数据库...');
connection = await mysql.createConnection(dbConfig);
// 1. 首先检查 prompt_template 表是否存在
console.log('📋 检查 prompt_template 表...');
const [tables] = await connection.execute(`
SELECT TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'pronode_db'
AND TABLE_NAME = 'prompt_template'
`);
if (tables.length === 0) {
console.log('❌ prompt_template 表不存在');
return;
}
// 2. 获取 prompt_template 表的结构
console.log('🔍 获取 prompt_template 表结构...');
const [columns] = await connection.execute(`
DESCRIBE prompt_template
`);
console.log('prompt_template 表结构:', columns);
// 3. 获取 prompt_template 表中的所有数据
console.log('📊 获取 prompt_template 数据...');
const [sourceData] = await connection.execute('SELECT * FROM prompt_template');
console.log(`找到 ${sourceData.length} 条数据`);
if (sourceData.length === 0) {
console.log('❌ prompt_template 表中没有数据');
return;
}
// 4. 显示前几条数据作为示例
console.log('📝 数据示例:');
sourceData.slice(0, 3).forEach((row, index) => {
console.log(`记录 ${index + 1}:`, row);
});
// 5. 获取 promptforge_templates 表结构
console.log('🔍 获取 promptforge_templates 表结构...');
const [targetColumns] = await connection.execute(`
DESCRIBE promptforge_templates
`);
console.log('promptforge_templates 表结构:', targetColumns);
// 6. 开始数据迁移
console.log('🚀 开始数据迁移...');
let successCount = 0;
let errorCount = 0;
for (const sourceRow of sourceData) {
try {
// 构建目标数据,根据字段名进行映射
const targetData = {
id: sourceRow.id || `template_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
title: sourceRow.title || sourceRow.name || '未命名模板',
description: sourceRow.description || sourceRow.desc || '',
category: sourceRow.category || 'programming',
role: sourceRow.role || '',
task: sourceRow.task || '',
context: sourceRow.context || '',
constraints: sourceRow.constraints ? JSON.stringify(sourceRow.constraints) : '[]',
variables: sourceRow.variables ? JSON.stringify(sourceRow.variables) : '[]',
outputFormat: sourceRow.outputFormat || sourceRow.output_format || '',
authorId: sourceRow.authorId || sourceRow.user_id || sourceRow.author_id || 'system',
isPublic: sourceRow.isPublic || sourceRow.is_public || true,
usageCount: sourceRow.usageCount || sourceRow.usage_count || 0,
rating: sourceRow.rating || 0,
ratingCount: sourceRow.ratingCount || sourceRow.rating_count || 0,
createdAt: sourceRow.createdAt || sourceRow.created_at || new Date().toISOString().slice(0, 19).replace('T', ' '),
updatedAt: sourceRow.updatedAt || sourceRow.updated_at || new Date().toISOString().slice(0, 19).replace('T', ' ')
};
// 检查是否已存在相同ID的记录
const [existing] = await connection.execute(
'SELECT id FROM promptforge_templates WHERE id = ?',
[targetData.id]
);
if (existing.length > 0) {
console.log(`⚠️ 跳过已存在的记录: ${targetData.id}`);
continue;
}
// 插入数据
await connection.execute(`
INSERT INTO promptforge_templates (
id, title, description, category, role, task, context,
constraints, variables, outputFormat, authorId, isPublic,
usageCount, rating, ratingCount, createdAt, updatedAt
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`, [
targetData.id,
targetData.title,
targetData.description,
targetData.category,
targetData.role,
targetData.task,
targetData.context,
targetData.constraints,
targetData.variables,
targetData.outputFormat,
targetData.authorId,
targetData.isPublic,
targetData.usageCount,
targetData.rating,
targetData.ratingCount,
targetData.createdAt,
targetData.updatedAt
]);
successCount++;
console.log(`✅ 成功迁移: ${targetData.title}`);
} catch (error) {
errorCount++;
console.error(`❌ 迁移失败 (${sourceRow.id || 'unknown'}):`, error.message);
}
}
console.log('\n📊 迁移完成统计:');
console.log(`✅ 成功: ${successCount}`);
console.log(`❌ 失败: ${errorCount}`);
console.log(`📝 总计: ${sourceData.length}`);
// 7. 验证迁移结果
console.log('\n🔍 验证迁移结果...');
const [finalCount] = await connection.execute('SELECT COUNT(*) as count FROM promptforge_templates');
console.log(`promptforge_templates 表现在有 ${finalCount[0].count} 条记录`);
} catch (error) {
console.error('❌ 迁移过程中发生错误:', error);
} finally {
if (connection) {
await connection.end();
console.log('🔌 数据库连接已关闭');
}
}
}
// 运行迁移
migratePromptTemplateData().catch(console.error);