Node.js SQL Server: импорт CSV

В этом руководстве вы научитесь импортировать данные из 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;

sql server импорт csv файл nodejs

Вывод показывает, что данные из CSV-файла успешно импортированы в таблицу «Авторы».

Загрузите исходный код проекта

Загрузите исходный код проекта

Краткое содержание

  • Используйте пакет csv-parse для чтения данных из CSV-файла и выполнения оператора INSERT для вставки строк в таблицу в базе данных SQL Server.
Мирослав С.

Автор статей, ИБ-специалист