SQLite
Исходный код: lib/sqlite.js
Модуль node:sqlite упрощает работу с базами данных SQLite. Для доступа к нему:
Модули JavaScript
import sqlite from 'node:sqlite';
CommonJS
const sqlite = require('node:sqlite');Этот модуль доступен только по схеме node:.
В следующем примере показано базовое использование модуля node:sqlite для открытия базы данных в памяти, записи в неё данных и последующего чтения этих данных.
Модули JavaScript
import { DatabaseSync } from 'node:sqlite';
const database = new DatabaseSync(':memory:');
// Execute SQL statements from strings.
database.exec(`
CREATE TABLE data(
key INTEGER PRIMARY KEY,
value TEXT
) STRICT
`);
// Create a prepared statement to insert data into the database.
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Execute the prepared statement with bound values.
insert.run(1, 'hello');
insert.run(2, 'world');
// Create a prepared statement to read data from the database.
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Execute the prepared statement and log the result set.
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]CommonJS
'use strict';
const { DatabaseSync } = require('node:sqlite');
const database = new DatabaseSync(':memory:');
// Execute SQL statements from strings.
database.exec(`
CREATE TABLE data(
key INTEGER PRIMARY KEY,
value TEXT
) STRICT
`);
// Create a prepared statement to insert data into the database.
const insert = database.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
// Execute the prepared statement with bound values.
insert.run(1, 'hello');
insert.run(2, 'world');
// Create a prepared statement to read data from the database.
const query = database.prepare('SELECT * FROM data ORDER BY key');
// Execute the prepared statement and log the result set.
console.log(query.all());
// Prints: [ { key: 1, value: 'hello' }, { key: 2, value: 'world' } ]Класс: DatabaseSync
Этот класс представляет собой одно подключение к базе данных SQLite. Все API, предоставляемые этим классом, выполняются синхронно.
new DatabaseSync(path[, options])
-
path<string> | <Buffer> | <URL> Путь к базе данных. База данных SQLite может храниться в файле или полностью в памяти. Чтобы использовать базу данных, хранящуюся в файле, укажите путь к файлу. Чтобы использовать базу данных в памяти, укажите специальное имя':memory:'. -
options<Object> Параметры конфигурации подключения к базе данных. Поддерживаются следующие параметры:-
open<boolean> Еслиtrue, база данных открывается конструктором. Если это значение равноfalse, базу данных необходимо открыть с помощью методаopen(). По умолчанию:true. -
readOnly<boolean> Еслиtrue, база данных открывается в режиме только для чтения. Если база данных не существует, открыть её не удастся. По умолчанию:false. -
enableForeignKeyConstraints<boolean> Еслиtrue, ограничения внешних ключей включены. Это рекомендуется, но для совместимости с устаревшими схемами баз данных их можно отключить. Проверку ограничений внешних ключей можно включать и отключать после открытия базы данных с помощьюPRAGMA foreign_keys. По умолчанию:true. -
enableDoubleQuotedStringLiterals<boolean> Еслиtrue, SQLite будет принимать строковые литералы в двойных кавычках. Это не рекомендуется, но такую возможность можно включить для совместимости с устаревшими схемами баз данных. По умолчанию:false. -
allowExtension<boolean> Еслиtrue, включаются функция SQLloadExtensionи методloadExtension(). Позже можно вызватьenableLoadExtension(false), чтобы отключить эту возможность. По умолчанию:false. -
timeout<number> Тайм-аут ожидания блокировки в миллисекундах. Это максимальное время, в течение которого SQLite будет ждать снятия блокировки базы данных, прежде чем вернуть ошибку. По умолчанию:0. -
readBigInts<boolean> Еслиtrue, целочисленные поля считываются как значения JavaScript типаBigInt. Еслиfalse, целочисленные поля считываются как числа JavaScript. По умолчанию:false. -
returnArrays<boolean> Еслиtrue, результаты запросов возвращаются в виде массивов, а не объектов. По умолчанию:false. -
allowBareNamedParameters<boolean> Еслиtrue, именованные параметры можно привязывать без символа-префикса (например,fooвместо:foo). По умолчанию:true. -
allowUnknownNamedParameters<boolean> Еслиtrue, неизвестные именованные параметры при привязке игнорируются. Еслиfalse, для неизвестных именованных параметров выбрасывается исключение. По умолчанию:false. -
defensive<boolean> Еслиtrue, включается защитный флаг. Когда защитный флаг включён, отключаются языковые средства, позволяющие намеренно повредить файл базы данных с помощью обычных SQL-команд. Защитный флаг также можно установить с помощьюenableDefensive(). По умолчанию:true.
-
Создаёт новый экземпляр DatabaseSync.
database.aggregate(name, options)
Регистрирует в базе данных SQLite новую агрегатную функцию. Этот метод является обёрткой для sqlite3_create_window_function().
-
name<string> Имя создаваемой функции SQLite. -
options<Object> Параметры конфигурации функции.-
deterministic<boolean> Еслиtrue, для созданной функции устанавливается флагSQLITE_DETERMINISTIC. По умолчанию:false. -
directOnly<boolean> Еслиtrue, для созданной функции устанавливается флагSQLITE_DIRECTONLY. По умолчанию:false. -
useBigIntArguments<boolean> Еслиtrue, целочисленные аргументы функцийoptions.stepиoptions.inverseпреобразуются вBigInt. Еслиfalse, целочисленные аргументы передаются как числа JavaScript. По умолчанию:false. -
varargs<boolean> Еслиtrue, функцииoptions.stepиoptions.inverseможно вызывать с любым количеством аргументов (от нуля доSQLITE_MAX_FUNCTION_ARG). Еслиfalse, функцииinverseиstepнеобходимо вызывать ровно сlengthаргументами. По умолчанию:false. -
start<number> | <string> | <null> | <Array> | <Object> | <Function> Начальное значение функции агрегации. Это значение используется при инициализации функции агрегации. Если передана функция <Function>, начальным значением будет результат её вызова. -
step<Function> Функция, вызываемая для каждой строки при агрегации. Функция получает текущее состояние и значение строки. Она должна возвращать новое состояние. -
result<Function> Функция, вызываемая для получения результата агрегации. Функция получает итоговое состояние и должна возвращать результат агрегации. -
inverse<Function> Если эта функция задана, методaggregateбудет работать как оконная функция. Функция получает текущее состояние и значение удалённой строки. Она должна возвращать новое состояние.
-
При использовании в качестве оконной функции функция result будет вызываться несколько раз.
CommonJS
const { DatabaseSync } = require('node:sqlite');
const db = new DatabaseSync(':memory:');
db.exec(`
CREATE TABLE t3(x, y);
INSERT INTO t3 VALUES ('a', 4),
('b', 5),
('c', 3),
('d', 8),
('e', 1);
`);
db.aggregate('sumint', {
start: 0,
step: (acc, value) => acc + value,
});
db.prepare('SELECT sumint(y) as total FROM t3').get(); // { total: 21 }Модули JavaScript
import { DatabaseSync } from 'node:sqlite';
const db = new DatabaseSync(':memory:');
db.exec(`
CREATE TABLE t3(x, y);
INSERT INTO t3 VALUES ('a', 4),
('b', 5),
('c', 3),
('d', 8),
('e', 1);
`);
db.aggregate('sumint', {
start: 0,
step: (acc, value) => acc + value,
});
db.prepare('SELECT sumint(y) as total FROM t3').get(); // { total: 21 }
database.close()
Закрывает подключение к базе данных. Если база данных не открыта, выбрасывается исключение. Этот метод является обёрткой для sqlite3_close_v2().
database.loadExtension(path)
-
path<string> Путь к загружаемой общей библиотеке.
Загружает общую библиотеку в подключение к базе данных. Этот метод является обёрткой для sqlite3_load_extension(). При создании экземпляра DatabaseSync необходимо включить параметр allowExtension.
database.enableLoadExtension(allow)
-
allow<boolean> Разрешить ли загрузку расширений.
Включает или отключает функцию SQL loadExtension и метод loadExtension(). Если при создании allowExtension имеет значение false, включить загрузку расширений нельзя из соображений безопасности.
database.enableDefensive(active)
-
active<boolean> Устанавливать ли защитный флаг.
Включает или отключает защитный флаг. Когда защитный флаг активен, отключаются языковые средства, позволяющие намеренно повредить файл базы данных с помощью обычных SQL-команд. Подробности см. в разделе SQLITE_DBCONFIG_DEFENSIVE документации SQLite.
database.location([dbName])
-
dbName<string> Имя базы данных. Это может быть'main'(основная база данных по умолчанию) или любая другая база данных, добавленная с помощьюATTACH DATABASEПо умолчанию:'main'. - Возвращает: <string> | <null> Расположение файла базы данных. При использовании базы данных в памяти этот метод возвращает null.
Этот метод является обёрткой для sqlite3_db_filename()
database.exec(sql)
-
sql<string> Строка SQL для выполнения.
Этот метод позволяет выполнить одну или несколько инструкций SQL, не возвращая результаты. Он полезен для выполнения инструкций SQL, прочитанных из файла. Этот метод является обёрткой для sqlite3_exec().
database.function(name[, options], function)
-
name<string> Имя создаваемой функции SQLite. -
options<Object> Необязательные параметры конфигурации функции. Поддерживаются следующие свойства:-
deterministic<boolean> Еслиtrue, для созданной функции устанавливается флагSQLITE_DETERMINISTIC. По умолчанию:false. -
directOnly<boolean> Еслиtrue, для созданной функции устанавливается флагSQLITE_DIRECTONLY. По умолчанию:false. -
useBigIntArguments<boolean> Еслиtrue, целочисленные аргументы функцииfunctionпреобразуются вBigInt. Еслиfalse, целочисленные аргументы передаются как числа JavaScript. По умолчанию:false. -
varargs<boolean> Еслиtrue, функциюfunctionможно вызывать с любым количеством аргументов (от нуля доSQLITE_MAX_FUNCTION_ARG). Еслиfalse, функциюfunctionнеобходимо вызывать ровно сfunction.lengthаргументами. По умолчанию:false.
-
-
function<Function> Функция JavaScript, вызываемая при вызове функции SQLite. Она должна возвращать допустимый тип данных SQLite: см. раздел Преобразование типов между JavaScript и SQLite. Если возвращаемое значение равноundefined, результатом по умолчанию будетNULL.
Этот метод используется для создания пользовательских функций SQLite. Он является обёрткой для sqlite3_create_function_v2().
database.setAuthorizer(callback)
-
callback<Function> | <null> Функция авторизации, которую нужно установить, илиnull, чтобы сбросить текущую функцию авторизации.
Устанавливает функцию обратного вызова авторизации, которую SQLite вызывает при каждой попытке доступа к данным или изменения схемы базы данных с помощью подготовленных инструкций. Её можно использовать для реализации политик безопасности, аудита доступа или ограничения определённых операций. Этот метод является обёрткой для sqlite3_set_authorizer().
При вызове функция обратного вызова получает пять аргументов:
-
actionCode<number> Тип выполняемой операции (например,SQLITE_INSERT,SQLITE_UPDATE,SQLITE_SELECT). -
arg1<string> | <null> Первый аргумент (зависит от контекста; часто это имя таблицы). -
arg2<string> | <null> Второй аргумент (зависит от контекста; часто это имя столбца). -
dbName<string> | <null> Имя базы данных. -
triggerOrView<string> | <null> Имя триггера или представления, вызвавшего доступ.
Функция обратного вызова должна возвращать одну из следующих констант:
-
SQLITE_OK- Разрешить операцию. -
SQLITE_DENY- Запретить операцию (вызывает ошибку). -
SQLITE_IGNORE- Игнорировать операцию (молча пропустить её).
CommonJS
const { DatabaseSync, constants } = require('node:sqlite');
const db = new DatabaseSync(':memory:');
// Set up an authorizer that denies all table creation
db.setAuthorizer((actionCode) => {
if (actionCode === constants.SQLITE_CREATE_TABLE) {
return constants.SQLITE_DENY;
}
return constants.SQLITE_OK;
});
// This will work
db.prepare('SELECT 1').get();
// This will throw an error due to authorization denial
try {
db.exec('CREATE TABLE blocked (id INTEGER)');
} catch (err) {
console.log('Operation blocked:', err.message);
}Модули JavaScript
import { DatabaseSync, constants } from 'node:sqlite';
const db = new DatabaseSync(':memory:');
// Set up an authorizer that denies all table creation
db.setAuthorizer((actionCode) => {
if (actionCode === constants.SQLITE_CREATE_TABLE) {
return constants.SQLITE_DENY;
}
return constants.SQLITE_OK;
});
// This will work
db.prepare('SELECT 1').get();
// This will throw an error due to authorization denial
try {
db.exec('CREATE TABLE blocked (id INTEGER)');
} catch (err) {
console.log('Operation blocked:', err.message);
}
database.isOpen
- Тип: <boolean> Открыта ли база данных в данный момент.
database.isTransaction
- Тип: <boolean> Находится ли база данных в данный момент в транзакции. Этот метод является обёрткой для
sqlite3_get_autocommit().
database.open()
Открывает базу данных, указанную в аргументе path конструктора DatabaseSync. Этот метод следует использовать только в том случае, если база данных не открывается конструктором. Если база данных уже открыта, выбрасывается исключение.
database.prepare(sql[, options])
-
sql<string> Строка SQL для компиляции в подготовленную инструкцию. -
options<Object> Необязательная конфигурация подготовленной инструкции.-
readBigInts<boolean> Еслиtrue, целочисленные поля считываются как значения типаBigInt. По умолчанию: наследуется из параметров базы данных илиfalse. -
returnArrays<boolean> Еслиtrue, результаты возвращаются в виде массивов. По умолчанию: наследуется из параметров базы данных илиfalse. -
allowBareNamedParameters<boolean> Еслиtrue, именованные параметры можно привязывать без символа-префикса. По умолчанию: наследуется из параметров базы данных илиtrue. -
allowUnknownNamedParameters<boolean> Еслиtrue, неизвестные именованные параметры игнорируются. По умолчанию: наследуется из параметров базы данных илиfalse.
-
- Возвращает: <StatementSync> Подготовленную инструкцию.
Компилирует инструкцию SQL в подготовленную инструкцию. Этот метод является обёрткой для sqlite3_prepare_v2().
database.createTagStore([maxSize])
-
maxSize<integer> Максимальное количество подготовленных инструкций для кэширования. По умолчанию:1000. - Возвращает: <SQLTagStore> Новое хранилище SQL-тегов для кэширования подготовленных инструкций.
Создаёт новое SQLTagStore — кэш вытеснения давно не использовавшихся элементов (LRU) для хранения подготовленных инструкций. Это позволяет эффективно повторно использовать подготовленные инструкции, помечая их уникальным идентификатором.
При выполнении помеченного SQL-литерала SQLTagStore проверяет, есть ли в кэше подготовленная инструкция для соответствующей строки запроса SQL. Если есть, используется кэшированная инструкция. Если нет, создаётся новая подготовленная инструкция, выполняется и сохраняется в кэше для дальнейшего использования. Этот механизм помогает избежать накладных расходов на повторный разбор и подготовку одних и тех же инструкций SQL.
В помеченных инструкциях значения-заполнители из шаблонного литерала привязываются в качестве параметров к базовой подготовленной инструкции. Например:
sqlTagStore.get`SELECT ${value}`; copy эквивалентно следующему:
db.prepare('SELECT ?').get(value); copy Однако в первом примере хранилище тегов кэширует базовую подготовленную инструкцию для дальнейшего использования.
Примечание: Синтаксис
${value}в помеченных инструкциях привязывает параметр к подготовленной инструкции. Это отличается от его поведения в непомеченных шаблонных литералах, где он выполняет интерполяцию строк.// This a safe example of binding a parameter to a tagged statement. sqlTagStore.run`INSERT INTO t1 (id) VALUES (${id})`; // This is an *unsafe* example of an untagged template string. // `id` is interpolated into the query text as a string. // This can lead to SQL injection and data corruption. db.run(`INSERT INTO t1 (id) VALUES (${id})`); copy
Хранилище тегов использует инструкцию из кэша, если строки запроса (включая позиции всех связанных заполнителей) идентичны.
// The following statements will match in the cache:
sqlTagStore.get`SELECT * FROM t1 WHERE id = ${id} AND active = 1`;
sqlTagStore.get`SELECT * FROM t1 WHERE id = ${12345} AND active = 1`;
// The following statements will not match, as the query strings
// and bound placeholders differ:
sqlTagStore.get`SELECT * FROM t1 WHERE id = ${id} AND active = 1`;
sqlTagStore.get`SELECT * FROM t1 WHERE id = 12345 AND active = 1`;
// The following statements will not match, as matches are case-sensitive:
sqlTagStore.get`SELECT * FROM t1 WHERE id = ${id} AND active = 1`;
sqlTagStore.get`select * from t1 where id = ${id} and active = 1`; copy Единственный способ привязать параметры в помеченных инструкциях — использовать синтаксис ${value}. Не добавляйте заполнители для привязки параметров (например, ?) непосредственно в строку запроса SQL.
Модули JavaScript
import { DatabaseSync } from 'node:sqlite';
const db = new DatabaseSync(':memory:');
const sql = db.createTagStore();
db.exec('CREATE TABLE users (id INT, name TEXT)');
// Using the 'run' method to insert data.
// The tagged literal is used to identify the prepared statement.
sql.run`INSERT INTO users VALUES (1, 'Alice')`;
sql.run`INSERT INTO users VALUES (2, 'Bob')`;
// Using the 'get' method to retrieve a single row.
const name = 'Alice';
const user = sql.get`SELECT * FROM users WHERE name = ${name}`;
console.log(user); // { id: 1, name: 'Alice' }
// Using the 'all' method to retrieve all rows.
const allUsers = sql.all`SELECT * FROM users ORDER BY id`;
console.log(allUsers);
// [
// { id: 1, name: 'Alice' },
// { id: 2, name: 'Bob' }
// ]CommonJS
const { DatabaseSync } = require('node:sqlite');
const db = new DatabaseSync(':memory:');
const sql = db.createTagStore();
db.exec('CREATE TABLE users (id INT, name TEXT)');
// Using the 'run' method to insert data.
// The tagged literal is used to identify the prepared statement.
sql.run`INSERT INTO users VALUES (1, 'Alice')`;
sql.run`INSERT INTO users VALUES (2, 'Bob')`;
// Using the 'get' method to retrieve a single row.
const name = 'Alice';
const user = sql.get`SELECT * FROM users WHERE name = ${name}`;
console.log(user); // { id: 1, name: 'Alice' }
// Using the 'all' method to retrieve all rows.
const allUsers = sql.all`SELECT * FROM users ORDER BY id`;
console.log(allUsers);
// [
// { id: 1, name: 'Alice' },
// { id: 2, name: 'Bob' }
// ]
database.createSession([options])
-
options<Object> Параметры конфигурации сеанса.-
table<string> Конкретная таблица, изменения в которой нужно отслеживать. По умолчанию отслеживаются изменения во всех таблицах. -
db<string> Имя отслеживаемой базы данных. Это полезно, если с помощьюATTACH DATABASEбыло добавлено несколько баз данных. По умолчанию:'main'.
-
- Возвращает: <Session> Дескриптор сеанса.
Создаёт сеанс и подключает его к базе данных. Этот метод является обёрткой для sqlite3session_create() и sqlite3session_attach().
database.applyChangeset(changeset[, options])
-
changeset<Uint8Array> Двоичный набор изменений или набор исправлений. -
options<Object> Параметры конфигурации, определяющие способ применения изменений.-
filter<Function> Пропускает изменения, если эта функция возвращает истинное значение для переданного ей имени целевой таблицы. По умолчанию предпринимается попытка применить все изменения. -
onConflict<Function> Функция, определяющая способ обработки конфликтов. Функция получает один аргумент, который может принимать одно из следующих значений:-
SQLITE_CHANGESET_DATA: изменениеDELETEилиUPDATEне содержит ожидаемых значений «до». -
SQLITE_CHANGESET_NOTFOUND: строка, соответствующая первичному ключу измененияDELETEилиUPDATE, не существует. -
SQLITE_CHANGESET_CONFLICT: изменениеINSERTприводит к дублированию первичного ключа. -
SQLITE_CHANGESET_FOREIGN_KEY: применение изменения приведет к нарушению внешнего ключа. -
SQLITE_CHANGESET_CONSTRAINT: применение изменения приводит к нарушению ограниченияUNIQUE,CHECKилиNOT NULL.
Функция должна возвращать одно из следующих значений:
-
SQLITE_CHANGESET_OMIT: пропустить конфликтующие изменения. -
SQLITE_CHANGESET_REPLACE: заменить существующие значения конфликтующими изменениями (допустимо только для конфликтовSQLITE_CHANGESET_DATAилиSQLITE_CHANGESET_CONFLICT). -
SQLITE_CHANGESET_ABORT: прервать выполнение при конфликте и выполнить откат базы данных.
Если в обработчике конфликтов возникает исключение или обработчик возвращает любое другое значение, применение набора изменений прерывается, а база данных откатывается.
По умолчанию: функция, возвращающая
SQLITE_CHANGESET_ABORT. -
-
- Возвращает: <boolean> Указывает, был ли набор изменений успешно применен без прерывания.
Если база данных не открыта, возникает исключение. Этот метод является оболочкой для sqlite3changeset_apply().
Модули JavaScript
import { DatabaseSync } from 'node:sqlite';
const sourceDb = new DatabaseSync(':memory:');
const targetDb = new DatabaseSync(':memory:');
sourceDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');
targetDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');
const session = sourceDb.createSession();
const insert = sourceDb.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
insert.run(1, 'hello');
insert.run(2, 'world');
const changeset = session.changeset();
targetDb.applyChangeset(changeset);
// Now that the changeset has been applied, targetDb contains the same data as sourceDb.CommonJS
const { DatabaseSync } = require('node:sqlite');
const sourceDb = new DatabaseSync(':memory:');
const targetDb = new DatabaseSync(':memory:');
sourceDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');
targetDb.exec('CREATE TABLE data(key INTEGER PRIMARY KEY, value TEXT)');
const session = sourceDb.createSession();
const insert = sourceDb.prepare('INSERT INTO data (key, value) VALUES (?, ?)');
insert.run(1, 'hello');
insert.run(2, 'world');
const changeset = session.changeset();
targetDb.applyChangeset(changeset);
// Now that the changeset has been applied, targetDb contains the same data as sourceDb.
database[Symbol.dispose]()
Закрывает соединение с базой данных. Если соединение с базой данных уже закрыто, ничего не происходит.
Класс: Session
session.changeset()
- Возвращает: <Uint8Array> Двоичный набор изменений, который можно применить к другим базам данных.
Получает набор изменений, содержащий все изменения с момента его создания. Метод можно вызывать несколько раз. Если база данных или сеанс не открыты, возникает исключение. Этот метод является оболочкой для sqlite3session_changeset().
session.patchset()
- Возвращает: <Uint8Array> Двоичный набор исправлений, который можно применить к другим базам данных.
Аналогичен описанному выше методу, но создает более компактный набор исправлений. См. раздел Наборы изменений и наборы исправлений в документации SQLite. Если база данных или сеанс не открыты, возникает исключение. Этот метод является оболочкой для sqlite3session_patchset().
session.close()
Закрывает сеанс. Если база данных или сеанс не открыты, возникает исключение. Этот метод является оболочкой для sqlite3session_delete().
session[Symbol.dispose]()
Закрывает сеанс. Если сеанс уже закрыт, ничего не происходит.
Класс: StatementSync
Этот класс представляет собой один подготовленный оператор. Нельзя создать экземпляр этого класса с помощью конструктора. Вместо этого экземпляры создаются с помощью метода database.prepare(). Все API, предоставляемые этим классом, выполняются синхронно.
Подготовленный оператор — это эффективное двоичное представление SQL-кода, использованного для его создания. В подготовленные операторы можно подставлять параметры, и их можно вызывать несколько раз с разными привязанными значениями. Параметры также обеспечивают защиту от атак типа SQL-инъекции. По этим причинам при обработке пользовательского ввода предпочтительнее использовать подготовленные операторы, а не SQL-строки, созданные вручную.
statement.all([namedParameters][, ...anonymousParameters])
-
namedParameters<Object> Необязательный объект для привязки именованных параметров. Ключи этого объекта используются для настройки сопоставления. -
...anonymousParameters<null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для привязки к анонимным параметрам. - Возвращает: <Array> Массив объектов. Каждый объект соответствует строке, возвращенной при выполнении подготовленного оператора. Ключи и значения каждого объекта соответствуют именам столбцов и значениям в строке.
Этот метод выполняет подготовленный оператор и возвращает все результаты в виде массива объектов. Если подготовленный оператор не возвращает результатов, метод возвращает пустой массив. Параметры подготовленного оператора привязываются с использованием значений из namedParameters и anonymousParameters.
statement.columns()
-
Возвращает: <Array> Массив объектов. Каждый объект соответствует столбцу подготовленного оператора и содержит следующие свойства:
-
column<string> | <null> Имя столбца исходной таблицы без псевдонима илиnull, если столбец является результатом выражения или подзапроса. Это свойство соответствует результатуsqlite3_column_origin_name(). -
database<string> | <null> Имя исходной базы данных без псевдонима илиnull, если столбец является результатом выражения или подзапроса. Это свойство соответствует результатуsqlite3_column_database_name(). -
name<string> Имя, присвоенное столбцу в результирующем наборе оператораSELECT. Это свойство соответствует результатуsqlite3_column_name(). -
table<string> | <null> Имя исходной таблицы без псевдонима илиnull, если столбец является результатом выражения или подзапроса. Это свойство соответствует результатуsqlite3_column_table_name(). -
type<string> | <null> Объявленный тип данных столбца илиnull, если столбец является результатом выражения или подзапроса. Это свойство соответствует результатуsqlite3_column_decltype().
-
Этот метод используется для получения сведений о столбцах, возвращаемых подготовленным оператором.
statement.expandedSQL
- Тип: <string> Исходный SQL-код с подставленными значениями параметров.
Исходный текст SQL подготовленного оператора, в котором заполнители параметров заменены значениями, использованными при последнем выполнении этого подготовленного оператора. Это свойство является оболочкой для sqlite3_expanded_sql().
statement.get([namedParameters][, ...anonymousParameters])
-
namedParameters<Object> Необязательный объект для привязки именованных параметров. Ключи этого объекта используются для настройки сопоставления. -
...anonymousParameters<null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для привязки к анонимным параметрам. - Возвращает: <Object> | <undefined> Объект, соответствующий первой строке, возвращенной при выполнении подготовленного оператора. Ключи и значения объекта соответствуют именам столбцов и значениям в строке. Если база данных не вернула ни одной строки, метод возвращает
undefined.
Этот метод выполняет подготовленный оператор и возвращает первый результат в виде объекта. Если подготовленный оператор не возвращает результатов, метод возвращает undefined. Параметры подготовленного оператора привязываются с использованием значений из namedParameters и anonymousParameters.
statement.iterate([namedParameters][, ...anonymousParameters])
-
namedParameters<Object> Необязательный объект для привязки именованных параметров. Ключи этого объекта используются для настройки сопоставления. -
...anonymousParameters<null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для привязки к анонимным параметрам. - Возвращает: <Iterator> Итерируемый итератор объектов. Каждый объект соответствует строке, возвращенной при выполнении подготовленного оператора. Ключи и значения каждого объекта соответствуют именам столбцов и значениям в строке.
Этот метод выполняет подготовленный оператор и возвращает итератор объектов. Если подготовленный оператор не возвращает результатов, метод возвращает пустой итератор. Параметры подготовленного оператора привязываются с использованием значений из namedParameters и anonymousParameters.
statement.run([namedParameters][, ...anonymousParameters])
-
namedParameters<Object> Необязательный объект для привязки именованных параметров. Ключи этого объекта используются для настройки сопоставления. -
...anonymousParameters<null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Ноль или более значений для привязки к анонимным параметрам. - Возвращает: <Object>
-
changes<number> | <bigint> Число строк, измененных, добавленных или удаленных при последнем завершенном оператореINSERT,UPDATEилиDELETE. Это поле содержит число илиBigIntв зависимости от конфигурации подготовленного оператора. Это свойство соответствует результатуsqlite3_changes64(). -
lastInsertRowid<number> | <bigint> Идентификатор последней добавленной строки (rowid). Это поле содержит число илиBigIntв зависимости от конфигурации подготовленного оператора. Это свойство соответствует результатуsqlite3_last_insert_rowid().
-
Этот метод выполняет подготовленный оператор и возвращает объект со сводной информацией о внесенных изменениях. Параметры подготовленного оператора привязываются с использованием значений из namedParameters и anonymousParameters.
statement.setAllowBareNamedParameters(enabled)
-
enabled<boolean> Включает или отключает возможность привязки именованных параметров без символа-префикса.
Имена параметров SQLite начинаются с символа-префикса. По умолчанию node:sqlite требует наличия этого символа-префикса при привязке параметров. Однако, за исключением знака доллара, при использовании этих символов-префиксов в качестве ключей объектов требуется дополнительное экранирование.
Для удобства этот метод также позволяет использовать простые именованные параметры, которым не нужен символ-префикс в коде JavaScript. При включении простых именованных параметров следует учитывать несколько особенностей:
- В SQL по-прежнему требуется символ-префикс.
- В JavaScript символ-префикс по-прежнему разрешен. Более того, привязка имен с префиксом будет немного производительнее.
- Использование неоднозначных именованных параметров, например
$kи@k, в одном подготовленном операторе приведет к исключению, поскольку определить способ привязки имени без префикса невозможно.
statement.setAllowUnknownNamedParameters(enabled)
-
enabled<boolean> Включает или отключает поддержку неизвестных именованных параметров.
По умолчанию, если при привязке параметров встречается неизвестное имя, возникает исключение. Этот метод позволяет игнорировать неизвестные именованные параметры.
statement.setReturnArrays(enabled)
-
enabled<boolean> Включает или отключает возврат результатов запроса в виде массивов.
Если этот параметр включен, результаты запросов, возвращаемые методами all(), get() и iterate(), будут представлены в виде массивов, а не объектов.
statement.setReadBigInts(enabled)
-
enabled<boolean> Включает или отключает использованиеBigIntпри чтении из базы данных полейINTEGER.
При чтении из базы данных значения INTEGER SQLite по умолчанию преобразуются в числа JavaScript. Однако значения INTEGER SQLite могут быть больше чисел, которые способны представлять JavaScript. В таких случаях этот метод можно использовать для чтения данных INTEGER с помощью значений BigInt JavaScript. Этот метод не влияет на операции записи в базу данных, где всегда поддерживаются как числа, так и значения BigInt.
statement.sourceSQL
- Тип: <string> Исходный SQL-код, использованный для создания этого подготовленного оператора.
Исходный текст SQL подготовленного оператора. Это свойство является оболочкой для sqlite3_sql().
Class: SQLTagStore
Этот класс представляет собой отдельный кэш LRU (Least Recently Used, вытесняющий давно не использовавшиеся элементы) для хранения подготовленных инструкций.
Экземпляры этого класса создаются с помощью метода database.createTagStore(), а не через конструктор. Хранилище кэширует подготовленные инструкции на основе переданной строки SQL-запроса. При повторном появлении того же запроса хранилище извлекает кэшированную инструкцию и безопасно подставляет новые значения с помощью привязки параметров, предотвращая тем самым атаки, такие как SQL-инъекция.
Максимальный размер кэша по умолчанию составляет 1000 инструкций, но можно указать пользовательский размер (например, database.createTagStore(100)). Все API этого класса выполняются синхронно.
sqlTagStore.all(stringElements[, ...boundParameters])
-
stringElements<string[]> Элементы шаблонной строки, содержащие SQL-запрос. -
...boundParameters<null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Значения параметров, которые нужно привязать к заполнителям в шаблонной строке. - Возвращает: <Array> Массив объектов, представляющих строки, возвращённые запросом.
Выполняет указанный SQL-запрос и возвращает все полученные строки в виде массива объектов.
Эта функция предназначена для использования в качестве тега шаблонной строки, а не для прямого вызова.
sqlTagStore.get(stringElements[, ...boundParameters])
-
stringElements<string[]> Элементы шаблонной строки, содержащие SQL-запрос. -
...boundParameters<null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Значения параметров, которые нужно привязать к заполнителям в шаблонной строке. - Возвращает: <Object> | <undefined> Объект, представляющий первую строку, возвращённую запросом, или
undefined, если строки не возвращены.
Выполняет указанный SQL-запрос и возвращает первую полученную строку в виде объекта.
Эта функция предназначена для использования в качестве тега шаблонной строки, а не для прямого вызова.
sqlTagStore.iterate(stringElements[, ...boundParameters])
-
stringElements<string[]> Элементы шаблонной строки, содержащие SQL-запрос. -
...boundParameters<null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Значения параметров, которые нужно привязать к заполнителям в шаблонной строке. - Возвращает: <Iterator> Итератор, который возвращает объекты, представляющие строки, возвращённые запросом.
Выполняет указанный SQL-запрос и возвращает итератор по полученным строкам.
Эта функция предназначена для использования в качестве тега шаблонной строки, а не для прямого вызова.
sqlTagStore.run(stringElements[, ...boundParameters])
-
stringElements<string[]> Элементы шаблонной строки, содержащие SQL-запрос. -
...boundParameters<null> | <number> | <bigint> | <string> | <Buffer> | <TypedArray> | <DataView> Значения параметров, которые нужно привязать к заполнителям в шаблонной строке. - Возвращает: <Object> Объект с информацией о выполнении, включая
changesиlastInsertRowid.
Выполняет указанный SQL-запрос, который не должен возвращать строки (например, INSERT, UPDATE, DELETE).
Эта функция предназначена для использования в качестве тега шаблонной строки, а не для прямого вызова.
sqlTagStore.size
- Тип: <integer>
Свойство только для чтения, возвращающее количество подготовленных инструкций, находящихся в кэше.
sqlTagStore.capacity
- Тип: <integer>
Свойство только для чтения, возвращающее максимальное количество подготовленных инструкций, которое может храниться в кэше.
sqlTagStore.db
- Тип: <DatabaseSync>
Свойство только для чтения, возвращающее объект DatabaseSync, связанный с этим SQLTagStore.
sqlTagStore.clear()
Сбрасывает кэш LRU, удаляя все хранящиеся в нём подготовленные инструкции.
Преобразование типов между JavaScript и SQLite
При записи данных в SQLite из Node.js или чтении данных из SQLite необходимо преобразовывать типы данных JavaScript в типы SQLite и наоборот. Поскольку JavaScript поддерживает больше типов данных, чем SQLite, поддерживается только подмножество типов JavaScript. Попытка записать в SQLite неподдерживаемый тип данных приведёт к исключению.
| SQLite | JavaScript |
|---|---|
NULL |
<null> |
INTEGER |
<number> или <bigint> |
REAL |
<number> |
TEXT |
<string> |
BLOB |
<TypedArray> или <DataView> |
sqlite.backup(sourceDb, path[, options])
-
sourceDb<DatabaseSync> База данных для резервного копирования. Исходная база данных должна быть открыта. -
path<string> | <Buffer> | <URL> Путь, по которому будет создана резервная копия. Если файл уже существует, его содержимое будет перезаписано. -
options<Object> Необязательные параметры резервного копирования. Поддерживаются следующие свойства:-
source<string> Имя исходной базы данных. Это может быть'main'(основная база данных по умолчанию) или любая другая база данных, добавленная с помощьюATTACH DATABASEПо умолчанию:'main'. -
target<string> Имя целевой базы данных. Это может быть'main'(основная база данных по умолчанию) или любая другая база данных, добавленная с помощьюATTACH DATABASEПо умолчанию:'main'. -
rate<number> Количество страниц, передаваемых в каждом пакете резервной копии. По умолчанию:100. -
progress<Function> Необязательная функция обратного вызова, вызываемая после каждого шага резервного копирования. В эту функцию передаётся аргумент <Object> со свойствамиremainingPagesиtotalPages, описывающими текущий ход операции резервного копирования.
-
- Возвращает: <Promise> Промис, который при успешном завершении выполняется с общим количеством страниц резервной копии или отклоняется при возникновении ошибки.
Этот метод создаёт резервную копию базы данных. Метод абстрагирует функции sqlite3_backup_init(), sqlite3_backup_step() и sqlite3_backup_finish().
Резервную копию базы данных можно использовать в обычном режиме во время процесса её создания. Изменения, внесённые через то же подключение — тот же объект <DatabaseSync>, — сразу же отразятся в резервной копии. Однако изменения из других подключений приведут к перезапуску процесса резервного копирования.
CommonJS
const { backup, DatabaseSync } = require('node:sqlite');
(async () => {
const sourceDb = new DatabaseSync('source.db');
const totalPagesTransferred = await backup(sourceDb, 'backup.db', {
rate: 1, // Copy one page at a time.
progress: ({ totalPages, remainingPages }) => {
console.log('Backup in progress', { totalPages, remainingPages });
},
});
console.log('Backup completed', totalPagesTransferred);
})();Модули JavaScript
import { backup, DatabaseSync } from 'node:sqlite';
const sourceDb = new DatabaseSync('source.db');
const totalPagesTransferred = await backup(sourceDb, 'backup.db', {
rate: 1, // Copy one page at a time.
progress: ({ totalPages, remainingPages }) => {
console.log('Backup in progress', { totalPages, remainingPages });
},
});
console.log('Backup completed', totalPagesTransferred);
sqlite.constants
- Тип: <Object>
Объект, содержащий часто используемые константы для операций SQLite.
Константы SQLite
Следующие константы экспортируются объектом sqlite.constants.
Константы разрешения конфликтов
Одна из следующих констант передаётся в качестве аргумента обработчику разрешения конфликтов onConflict, переданному методу database.applyChangeset(). См. также раздел Константы, передаваемые обработчику конфликтов в документации SQLite.
| Константа | Описание |
|---|---|
SQLITE_CHANGESET_DATA | Эта константа передаётся обработчику конфликтов при обработке изменения DELETE или UPDATE, если в базе данных присутствует строка с требуемыми полями PRIMARY KEY, но одно или несколько других (не являющихся первичными ключами) полей, изменённых операцией UPDATE, не содержат ожидаемых предыдущих значений. |
SQLITE_CHANGESET_NOTFOUND | Эта константа передаётся обработчику конфликтов при обработке изменения DELETE или UPDATE, если в базе данных отсутствует строка с требуемыми полями PRIMARY KEY. |
SQLITE_CHANGESET_CONFLICT | Эта константа передаётся обработчику конфликтов при обработке изменения INSERT, если операция приведёт к дублированию значений первичного ключа. |
SQLITE_CHANGESET_CONSTRAINT | Если обработка внешних ключей включена и применение набора изменений приводит к нарушениям ограничений внешнего ключа в базе данных, эта константа передаётся обработчику конфликтов ровно один раз перед фиксацией набора изменений. Если обработчик конфликтов возвращает SQLITE_CHANGESET_OMIT, изменения, в том числе вызвавшие нарушение ограничения внешнего ключа, фиксируются. Если же он возвращает SQLITE_CHANGESET_ABORT, набор изменений откатывается. |
SQLITE_CHANGESET_FOREIGN_KEY | Если при применении изменения происходит любое другое нарушение ограничений (например, UNIQUE, CHECK или NOT NULL), эта константа передаётся обработчику конфликтов. |
Обработчик разрешения конфликтов onConflict, переданный методу database.applyChangeset(), должен возвращать одну из следующих констант. См. также раздел Константы, возвращаемые обработчиком конфликтов в документации SQLite.
| Константа | Описание |
|---|---|
SQLITE_CHANGESET_OMIT | Конфликтующие изменения пропускаются. |
SQLITE_CHANGESET_REPLACE | Конфликтующие изменения заменяют существующие значения. Обратите внимание, что это значение можно вернуть, только если тип конфликта — SQLITE_CHANGESET_DATA или SQLITE_CHANGESET_CONFLICT. |
SQLITE_CHANGESET_ABORT | Прервать операцию при возникновении конфликта во время изменения и откатить базу данных. |
Константы авторизации
Следующие константы используются с методом database.setAuthorizer().
Коды результатов авторизации
Функция обратного вызова авторизатора, переданная методу database.setAuthorizer(), должна возвращать одну из следующих констант.
| Константа | Описание |
|---|---|
SQLITE_OK | Разрешить выполнение операции в обычном режиме. |
SQLITE_DENY | Запретить операцию и вызвать ошибку. |
SQLITE_IGNORE | Игнорировать операцию и продолжить выполнение так, как если бы она не запрашивалась. |
Коды действий авторизации
Следующие константы передаются первым аргументом функции обратного вызова авторизатора и указывают тип операции, для которой выполняется авторизация.
| Константа | Описание |
|---|---|
SQLITE_CREATE_INDEX | Создание индекса |
SQLITE_CREATE_TABLE | Создание таблицы |
SQLITE_CREATE_TEMP_INDEX | Создание временного индекса |
SQLITE_CREATE_TEMP_TABLE | Создание временной таблицы |
SQLITE_CREATE_TEMP_TRIGGER | Создание временного триггера |
SQLITE_CREATE_TEMP_VIEW | Создание временного представления |
SQLITE_CREATE_TRIGGER | Создание триггера |
SQLITE_CREATE_VIEW | Создание представления |
SQLITE_DELETE | Удаление данных из таблицы |
SQLITE_DROP_INDEX | Удаление индекса |
SQLITE_DROP_TABLE | Удаление таблицы |
SQLITE_DROP_TEMP_INDEX | Удаление временного индекса |
SQLITE_DROP_TEMP_TABLE | Удаление временной таблицы |
SQLITE_DROP_TEMP_TRIGGER | Удаление временного триггера |
SQLITE_DROP_TEMP_VIEW | Удаление временного представления |
SQLITE_DROP_TRIGGER | Удаление триггера |
SQLITE_DROP_VIEW | Удаление представления |
SQLITE_INSERT | Вставка данных в таблицу |
SQLITE_PRAGMA | Выполнение инструкции PRAGMA |
SQLITE_READ | Чтение данных из таблицы |
SQLITE_SELECT | Выполнение инструкции SELECT |
SQLITE_TRANSACTION | Начало, фиксация или откат транзакции |
SQLITE_UPDATE | Обновление таблицы |
SQLITE_ATTACH | Подключение базы данных |
SQLITE_DETACH | Отключение базы данных |
SQLITE_ALTER_TABLE | Изменение таблицы |
SQLITE_REINDEX | Перестроение индексов |
SQLITE_ANALYZE | Анализ базы данных |
SQLITE_CREATE_VTABLE | Создание виртуальной таблицы |
SQLITE_DROP_VTABLE | Удаление виртуальной таблицы |
SQLITE_FUNCTION | Использование функции |
SQLITE_SAVEPOINT | Создание, освобождение или откат точки сохранения |
SQLITE_COPY | Копирование данных (устаревшее) |
SQLITE_RECURSIVE | Рекурсивный запрос |
© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v24.x/docs/api/sqlite.html