Node.js API
Устаревшее Старый пакет DuckDB Node.js устарел. Пожалуйста, используйте пакет DuckDB Node Neo вместо него.
Этот пакет предоставляет Node.js API для DuckDB. API этого клиента частично соответствует клиенту SQLite Node.js для более лёгкого перехода.
Для обёртки TypeScript см. проект duckdb-async.
Инициализация
Загрузите пакет и создайте объект базы данных:
const duckdb = require('duckdb');
const db = new duckdb.Database(':memory:'); // or a file name for a persistent DB Все параметры, как описано в конфигурации базы данных, могут быть (по желанию) переданы конструктору Database в качестве второго аргумента. Третий аргумент может быть (по желанию) передан для получения обратной связи по заданным параметрам.
const db = new duckdb.Database(':memory:', {
"access_mode": "READ_WRITE",
"max_memory": "512MB",
"threads": "4"
}, (err) => {
if (err) {
console.error(err);
}
}); Выполнение запроса
Следующий фрагмент кода выполняет простой запрос, используя метод Database.all().
db.all('SELECT 42 AS fortytwo', function(err, res) {
if (err) {
console.warn(err);
return;
}
console.log(res[0].fortytwo)
}); Другие доступные методы — each, где обратный вызов вызывается для каждой строки, run для выполнения одного оператора без результатов и exec, который может выполнить несколько SQL команд одновременно, но также не возвращает результаты. Все эти команды могут работать с подготовленными запросами, принимая значения для параметров в качестве дополнительных аргументов. Например, так:
db.all('SELECT ?::INTEGER AS fortytwo, ?::VARCHAR AS hello', 42, 'Hello, World', function(err, res) {
if (err) {
console.warn(err);
return;
}
console.log(res[0].fortytwo)
console.log(res[0].hello)
}); Подключения
База данных может иметь несколько Connectionов, которые создаются с помощью db.connect().
const con = db.connect();
Вы можете создать несколько подключений, каждое со своим контекстом транзакции.
Объекты Connection также содержат сокращения для прямого вызова run(), all() и each() с параметрами и обратными вызовами соответственно, например:
con.all('SELECT 42 AS fortytwo', function(err, res) {
if (err) {
console.warn(err);
return;
}
console.log(res[0].fortytwo)
}); Подготовленные запросы
Из подключений вы можете создать подготовленные запросы (и только их) с помощью con.prepare():
const stmt = con.prepare('SELECT ?::INTEGER AS fortytwo'); Для выполнения этого запроса вы можете вызвать, например, all() на объекте stmt:
stmt.all(42, function(err, res) {
if (err) {
console.warn(err);
} else {
console.log(res[0].fortytwo)
}
}); Вы также можете выполнить подготовленный запрос несколько раз. Это, например, полезно для заполнения таблицы данными:
con.run('CREATE TABLE a (i INTEGER)');
const stmt = con.prepare('INSERT INTO a VALUES (?)');
for (let i = 0; i < 10; i++) {
stmt.run(i);
}
stmt.finalize();
con.all('SELECT * FROM a', function(err, res) {
if (err) {
console.warn(err);
} else {
console.log(res)
}
}); prepare() также может принять обратный вызов, который получит подготовленный запрос в качестве аргумента:
const stmt = con.prepare('SELECT ?::INTEGER AS fortytwo', function(err, stmt) {
stmt.all(42, function(err, res) {
if (err) {
console.warn(err);
} else {
console.log(res[0].fortytwo)
}
});
}); Вставка данных через Arrow
Apache Arrow может использоваться для вставки данных в DuckDB без создания копии:
const arrow = require('apache-arrow');
const db = new duckdb.Database(':memory:');
const jsonData = [
{"userId":1,"id":1,"title":"delectus aut autem","completed":false},
{"userId":1,"id":2,"title":"quis ut nam facilis et officia qui","completed":false}
];
// note; doesn't work on Windows yet
db.exec(`INSTALL arrow; LOAD arrow;`, (err) => {
if (err) {
console.warn(err);
return;
}
const arrowTable = arrow.tableFromJSON(jsonData);
db.register_buffer("jsonDataTable", [arrow.tableToIPC(arrowTable)], true, (err, res) => {
if (err) {
console.warn(err);
return;
}
// `SELECT * FROM jsonDataTable` would return the entries in `jsonData`
});
}); Загрузка неподписанных расширений
Для загрузки неподписанных расширений, инициализируйте базу данных следующим образом:
db = new duckdb.Database(':memory:', {"allow_unsigned_extensions": "true"}); Страницы в этом разделе
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/api/nodejs/overview.html