如何使用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中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Node.js 和 Mongoose 将对象添加到嵌套数组