如何使用node.js将数组存储到sqlite中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用node.js将数组存储到sqlite中相关的知识,希望对你有一定的参考价值。

大家!有csv文件,我解析它(使用fast-csv),现在它存储为数组。现在我想使用node.js将此数组替换为SQLite DB。有人能告诉我我该怎么办?这是我的代码:

 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)
          });
答案

SQLite没有本机数组类型,但它支持Unicode文本和blob:https://www.sqlite.org/datatype3.html

因此,您需要将数组转换为这些格式之一,并将其​​存储在数据库中。或者,更方便的是,只需读入整个文件,然后在解析之前将其存储在db中。但要注意,这可能(或可能不是,取决于一个数据)浪费存储空间,如果这是一个问题,可能首选某种类型的自定义二进制序列化。

注意:default max length of strings and blobs是10亿,并且您不能将该限制设置为高于2 ^ 31-1,但这在实践中不应该是一个问题,您不应该存储数据库中的大对象。

以上是关于如何使用node.js将数组存储到sqlite中的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQLite3 + Node.js 的最佳实践

如何将文件逐行读入node.js中的数组[重复]

如何使用 Node.js 和 Mongoose 将对象添加到嵌套数组

如何在 MySQL 和 Node.js 的单列中存储数组值?

将 NSMutable 数组存储到 sqlite 数据库中

如何使用node.js中的循环将表单数据保存为对象和对象数组到mongodb?