Как сохранить массив в sqlite с помощью node.js

все! Есть файл csv, я его проанализировал (с помощью fast-csv) и теперь он хранится в виде массива. Теперь я хочу заменить этот массив в БД SQLite с помощью node.js. Может кто-нибудь подскажет, как мне это сделать? Вот мой код:

 class Person {
     getData(filename) {
            return new Promise((resolve, reject) => {
                let arrayData = [];
                const csv = require('fast-csv');
                csv.fromPath(`${filename}.csv`, {
                    headers: true,
                    strictColumnHandling: true,
                    delimiter: ',',
                    ignoreEmpty: true
                })
                    .on('data', data => arrayData.push(data))
                    .on('end', () => {
                        resolve({
                            arrayData,
                            title: filename,
                            columnCountData: Object.keys(arrayData[0]).length,
                            rowCountData: arrayData.length + 1, // data plus header
                        });
                    })
                    .on('error', (error) => {
                      reject(error);
                    });

            });
        }
    }
    let person = new Person();
    person.getData('person')
          .then((array) => {
              const sqlite3 = require('sqlite3').verbose();
    // open the database
              let db = new sqlite3.Database('./ook.db',sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {
                  if (err) {
                      console.error(err.message);
                  }
                  console.log("DB is connected");
              });
              db.close((err) => {
                  if (err) {
                      console.error(err.message);
                  }
                  console.log('Close the database connection.');
              });
              console.log(array);
          })
          .catch((error) => {
              console.log('все накрылось, потому что: ', error)
          });

Вы можете импортировать данные CSV с помощью оболочки sqlite3, другой язык не требуется: sqlite.org/cli.html#csv_import

Shawn 31.10.2018 18:21

Или, конечно, просто перебирайте свой массив и вставляйте элементы данных за раз. (Я предполагаю, что каждый элемент должен быть одной строкой)

Shawn 31.10.2018 18:26
0
2
1 227
1

Ответы 1

SQLite не имеет собственного типа массива, но поддерживает текст Unicode и blob-объекты: https://www.sqlite.org/datatype3.html

Итак, вам нужно преобразовать ваш массив в один из этих форматов и сохранить его в базе данных. Или, что более удобно, просто прочтите весь файл и сохраните что в базе данных, до анализирует его. Но имейте в виду, что это может (или не может, в зависимости от данных) расточать пространство для хранения, если это вызывает беспокойство, может быть предпочтительна какая-то настраиваемая двоичная сериализация вашего массива.

Примечание: максимальная длина строк и капель по умолчанию составляет 1 миллиард, и вы не можете установить этот предел выше 2 ^ 31-1, но на практике это не должно быть проблемой, вы не должны хранить такие большие объекты в базе данных.

Другие вопросы по теме