как сохранить массив в sqlite, используя node.js - PullRequest
0 голосов
/ 31 октября 2018

все! Есть 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)
          });

1 Ответ

0 голосов
/ 31 октября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...