Files
ameiba_cn_new/cms/server/src/import-mysql.js
T

20 lines
1.1 KiB
JavaScript

import mysql from 'mysql2/promise';
import fs from 'fs';
import 'dotenv/config';
const input = process.env.SQLITE_EXPORT_PATH || './sqlite-export.json';
const data = JSON.parse(fs.readFileSync(input, 'utf8'));
const connection = await mysql.createConnection({ host: process.env.DB_HOST || '127.0.0.1', port: Number(process.env.DB_PORT || 33306), user: process.env.DB_USER || 'admin', password: process.env.DB_PASSWORD || '', database: process.env.DB_NAME || 'ameiba_cms', charset: 'utf8mb4' });
for (const [table, rows] of Object.entries(data)) {
for (const row of rows) {
const columns = Object.keys(row);
const escaped = columns.map(c => `\`${c}\``).join(',');
const values = columns.map(() => '?').join(',');
const updates = columns.filter(c => c !== 'id').map(c => `\`${c}\`=VALUES(\`${c}\`)`).join(',');
await connection.query(`INSERT INTO \`${table}\` (${escaped}) VALUES (${values}) ON DUPLICATE KEY UPDATE ${updates || '`id`=VALUES(`id`)'}`, columns.map(c => row[c]));
}
console.log(`${table}: ${(rows || []).length} rows`);
}
await connection.end();
console.log('MySQL import complete');