В этом руководстве вы научитесь импортировать данные из CSV-файла в базу данных SQL Server с помощью программы Node.js.
Это руководство начинается с того места, где закончилось руководство по вставке данных в таблицу из Node.js.
Мы импортируем данные об авторах из CSV-файла в таблицу «Авторы».
Шаг 1. Откройте терминал и установите пакет csv-parse:
npm install csv-parse
Пакет csv-parse позволяет преобразовывать входные данные CSV в массивы или объекты JavaScript.
Шаг 2. Создайте новый каталог с именем data в каталоге проекта:
mkdir data
Шаг 3. Создайте новый CSV-файл с именем authors.csv, содержащий данные об авторах внутри каталога данных:
FirstName,LastName,BirthDate Agatha,Christie,1890-09-15 Mark,Twain,1835-11-30 George,Orwell,1903-06-25 Jane,Austen,1775-12-16 Charles,Dickens,1812-02-07 F. Scott,Fitzgerald,1896-09-24 Ernest,Hemingway,1899-07-21 Leo,Tolstoy,1828-09-09 Virginia,Woolf,1882-01-25 J.K.,Rowling,1965-07-31 J.R.R.,Tolkien,1892-01-03 Stephen,King,1947-09-21 Harper,Lee,1926-04-28 H.G.,Wells,1866-09-21 Herman,Melville,1819-08-01 Mary,Shelley,1797-08-30 Oscar,Wilde,1854-10-16 Emily,Bronte,1818-07-30 J.D.,Salinger,1919-01-01 Kurt,Vonnegut,1922-11-11
CSV-файл содержит три столбца: имя, фамилия и дата рождения, а также 20 авторов.
Шаг 4. Создайте новый файл read-csv.js, в котором будет храниться код для анализа данных authors.csv:
import { createReadStream } from 'fs'; import { parse } from 'csv-parse'; export async function readCSV(filePath) { const results = []; return new Promise((resolve, reject) => { // Create a read stream for the CSV file createReadStream(filePath) // Use columns option to automatically map CSV headers to object keys .pipe(parse({ columns: true })) .on('data',(data) => { results.push({ firstName: data.FirstName, lastName: data.LastName, birthDate: data.BirthDate, }); }) .on('end',() => resolve(results)) .on('error',(error) => reject(error)); }); }
Как это работает.
Сначала импортируйте функции createReadStream и parse из fs и csv-parse соответственно:
import { createReadStream } from 'fs'; import { parse } from 'csv-parse';
Во-вторых, создайте новую функцию readCSV, которая считывает данные из CSV-файла, указанного путем к файлу:
export async function readCSV(filePath) { // ...
Также экспортируйте функцию с помощью оператора export.
В-третьих, проанализируйте CSV-файл с помощью функции parse. Аргумент { columns: true } указывает функции parse автоматически сопоставлять заголовки CSV с ключами объектов:
.pipe(parse({ columns: true }))
Получив данные, мы вручную создаем объект автора с тремя ключами firstName, lastName и birthDate, которые сопоставляются со свойствами FirstName, LastName и BirthDate соответственно:
.on('data',(data) => { results.push({ firstName: data.FirstName, lastName: data.LastName, birthDate: data.BirthDate, }); })
Шаг 5. Измените insert-many.js, чтобы экспортировать функцию insertAuthors с помощью именованного экспорта:
import sql from 'mssql'; import { config } from './config.js'; const insertAuthors = async(authors) => { try { // Connect to the database await sql.connect(config); // Construct the insert query let query = 'INSERT INTO Authors(FirstName, LastName, BirthDate) VALUES '; // Build the values part of the query const values = authors .map( ({ firstName, lastName, birthDate }) => `('${firstName}', '${lastName}', '${birthDate}')` ) .join(', '); // Complete the query query += values; // Execute the query await sql.query(query); console.log(`${authors.length} authors were inserted successfully!`); } catch(err) { console.error('Error inserting authors:', err); } finally { // Close the database connection await sql.close(); } }; export { insertAuthors };
Шаг 6. Измените файл index.js, который считывает данные из файла ./data/authors.csv и вставляет их в таблицу Authors:
import { readCSV } from './read-csv.js'; import { insertAuthors } from './insert-many.js'; const filePath = 'data/authors.csv'; try { const authors = await readCSV(filePath); await insertAuthors(authors); } catch(err) { console.error(err); }
Как это работает.
Сначала импортируйте файл функции readCSV из модуля read-csv.js и функцию insertAuthors из модуля insert-many.js:
import { readCSV } from './read-csv.js'; import { insertAuthors } from './insert-many.js';
Во-вторых, считайте данные из файла authors.csv, вызвав функцию readCSV():
const authors = await readCSV(filePath);
Функция readCSV() возвращает массив объектов автора.
В-третьих, вставьте авторов из массива в таблицу Authors, вызвав функцию insertAuthors:
await insertAuthors(authors);
Шаг 7. Откройте терминал и выполните следующую команду для импорта данных из файла data/authors.csv в таблицу Authors:
npm start
Проверьте вставки
Шаг 1. Откройте SQL Server Management Studio(SSMS) и подключитесь к SQL Server.
Шаг 2. Выполните следующий оператор SELECT для запроса данных из таблицы Authors:
SELECT * FROM Authors;
Вывод показывает, что данные из CSV-файла успешно импортированы в таблицу «Авторы».
Загрузите исходный код проекта
Загрузите исходный код проекта
Краткое содержание
- Используйте пакет csv-parse для чтения данных из CSV-файла и выполнения оператора INSERT для вставки строк в таблицу в базе данных SQL Server.