Возможно ли использование с помощью команды node sqlite3 импортировать текстовый файл и улучшить массовую вставку?

#javascript #node.js #sqlite

#javascript #node.js #sqlite

Вопрос:

я пытаюсь импортировать csv-файл из node в файл sqlite.

Я попробовал выполнить следующую команду через npm-пакет sqlite3.

  var db = new sqlite3.Database(':memory:');

 db.run('.import "/Users/avito/PhpstormProjects/blog/typescript/src/app/services/workflow_temp.txt"'
          'INTO TABLE workflow_1_temp'
          'FIELDS TERMINATED BY ","'
          'ENCLOSED BY "'"'
          'LINES TERMINATED BY '\n''
          'IGNORE 1 ROWS'
          ')');
 

я получил эту ошибку

 Error: SQLITE_ERROR: near ".": syntax error
 

Когда я пытаюсь сделать это через командную строку, это работает. Возможно ли использовать функцию sqlite3 с этим пакетом npm?

И .import быстрее, чем массовая вставка? Я хочу улучшить массовую вставку. Когда я вставляю cca 1 000 000 ~ 5 сек. Возможно ли писать быстрее, когда я создаю файл .txt, а затем использую импорт через sqlite3 .import file.txt ?

Ответ №1:

Нет. «Интерактивный интерпретатор предлагает набор мета-команд», что означает .import реализован в двоичном файле sqlite3, а не в библиотеке, которую использует пакет JavaScript.

Имейте в виду, что sqlite по умолчанию использует режим автоматической фиксации, что означает транзакцию для каждого оператора. Если вы выполняете одну вставку на строку, это происходит медленно. Вы можете значительно ускорить процесс, если вы будете вставлять, скажем, 1000 строк за раз:

 insert into t (c) values (v1), (v2), .... (v1000);