大家! 有一个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)
});
答案 0 :(得分:0)
SQLite没有本地数组类型,但是它支持Unicode文本和Blob: https://www.sqlite.org/datatype3.html
因此,您需要将数组转换为以下格式之一,并将其存储在数据库中。或者,更方便的是,只需读取整个文件,然后将 存储在数据库中,在之前进行解析。但是请注意,这可能(或可能不会,取决于一个数据)浪费了存储空间,如果这是一个问题,则可能需要对数组进行某种自定义二进制序列化。
注意:default max length of strings and blobs是10亿,您不能将限制设置为高于2 ^ 31-1,但这在实践中应该不是问题,您不应该将大的对象存储在数据库。