Перейти к содержанию

SQLite

latest

Добавлено в: v22.5.0

История
Версия Изменения
v25.7.0 SQLite теперь является кандидатом на выпуск.
v23.4.0, v22.13.0 SQLite больше не отстает от --experimental-sqlite, но все еще является экспериментальным.

Стабильность: 1 – Экспериментальная

1.2 — кандидат в релиз. Ожидается, что возможность почти готова стать стабильной. Дополнительные ломающие изменения не предполагаются, но всё ещё возможны в ответ на отзывы пользователей или развитие базовой спецификации.

Модуль node:sqlite упрощает работу с базами SQLite. Подключение:

1
import sqlite from 'node:sqlite';
1
const sqlite = require('node:sqlite');

Модуль доступен только в схеме node:.

Ниже — базовый пример: открыть базу в памяти, записать данные и прочитать их обратно.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import { DatabaseSync } from 'node:sqlite';
const database = new DatabaseSync(':memory:');

// Выполнить SQL из строк
database.exec(`
  CREATE TABLE data(
    key INTEGER PRIMARY KEY,
    value TEXT
  ) STRICT
`);
// Подготовить выражение для вставки
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Выполнить с привязанными значениями
insert.run(1, 'hello');
insert.run(2, 'world');
// Подготовить выражение для чтения
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Выполнить и вывести результат
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
'use strict';
const { DatabaseSync } = require('node:sqlite');
const database = new DatabaseSync(':memory:');

// Выполнить SQL из строк
database.exec(`
  CREATE TABLE data(
    key INTEGER PRIMARY KEY,
    value TEXT
  ) STRICT
`);
// Подготовить выражение для вставки
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Выполнить с привязанными значениями
insert.run(1, 'hello');
insert.run(2, 'world');
// Подготовить выражение для чтения
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Выполнить и вывести результат
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]

Преобразование типов между JavaScript и SQLite

При записи и чтении SQLite нужно преобразовывать типы JavaScript и типы данных SQLite. В JavaScript типов больше, поэтому поддерживается лишь подмножество. Запись неподдерживаемого типа приведёт к исключению.

Класс хранения JavaScript → SQLite SQLite → JavaScript
NULL {null} {null}
INTEGER or or (configurable)
REAL
TEXT
BLOB or

API, читающие значения из SQLite, имеют опции, определяющие, преобразуются ли INTEGER в number или bigint в JavaScript — например readBigInts у выражений и useBigIntArguments у пользовательских функций. Если Node.js читает INTEGER вне диапазона безопасного целого JavaScript и чтение BigInt не включено, выбрасывается ERR_OUT_OF_RANGE.

Класс: DatabaseSync

Добавлено в: v22.5.0

История
Версия Изменения
v24.0.0, v22.16.0 Добавьте опцию «тайм-аут».
v23.10.0, v22.15.0 Аргумент path теперь поддерживает объекты Buffer и URL.

Этот класс представляет одно соединение с базой SQLite. Все API этого класса выполняются синхронно.

new DatabaseSync(path[, options])

Добавлено в: v22.5.0

История
Версия Изменения
v25.5.0, v24.14.0 Включите «защиту» по умолчанию.
v25.1.0, v24.12.0 Добавьте опцию «защита».
v24.4.0, v22.18.0 Добавьте новые параметры базы данных SQLite.

Комментарии